Diskuse

Téma: mod_rewrite pro vedlejší stránky

Zdravím,
řešil jsem to již jednou, ale nedořešil. Mám v mysql tabulku, viz obrázek níže. Jedná se o lexikon pojmů - http://www.vaszrak.cz/lexikon-pojmu?chr=A, který se vypisuje HCM modulem. Chtěl bych se zeptat, zdali lze úpravou index.php docílit přpsání URL z

http://www.vaszrak.cz/cizi-slovo?id=5na
http://www.vaszrak.cz/astigmatismus-5 (titlle_seo + ID v url).

Muselo by se zasahovat i do core.php nebo stačí index.php?

img
postZaslat odpověď
pokud už máš v db sloupce title_seo, tak proč nejít tohle cestou:http://www.vaszrak.cz/lexikon/astigmatismus
Pošli mi soubor ktery taha data z DB a export te tabluky lexicon. udělám pokus.
Ok.
Ten tvuj tvar je i lepsi.
PHP:
<?php
/* --- kontrola jadra --- */
if(!defined('_core')) exit;

function _HCM_custom_slovnikdetail(){

$result="";
$item = DB::row(DB::query("SELECT * FROM `" . _mysql_prefix . "-lexicon`" . (isset($_GET['id']) ? " WHERE id=".intval($_GET['id']) : '')));

if ($item) {
/*** Vlastní titulek - Start ***/
if(defined('_custom_slovnikdetail_overload')) return;
define('_custom_slovnikdetail_overload', "Co je to „".$item['title']."“? Řekneme Vám to! - "._title."");
_extend('reg', 'tpl.title', '_hcm_custom_slovnikdetail__callback');
/*** Vlastní titulek - End ***/

$result.="<h1>Co je to „".$item['title']."“?</h1>";
$result.="<p>".$item['content']."</p>";
$result.="<p><a href='"._linkRoot(75)."'>< Zpět na lexikon cizích slov</a></p>";}

else {
$result.=_formMessage(2, "Stránku nelze zobrazit!");}

return $result;
}
/*** Callback - Start ***/
function _hcm_custom_slovnikdetail__callback($args){
if($args['head'] && defined('_custom_slovnikdetail_overload')) $args['title'] = _custom_slovnikdetail_overload;
return false;
/*** Callback - End ***/
}

a SQL:
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
CREATE TABLE IF NOT EXISTS `sunlight-lexicon` (
`id` int(11) NOT NULL auto_increment,
`title_seo` varchar(64) character set utf8 NOT NULL,
`title` text character set utf8 NOT NULL,
`content` text character set utf8 NOT NULL,
`time` varchar(14) collate utf8 NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin2 COLLATE=latin2_czech_cs AUTO_INCREMENT=14 ;

INSERT INTO `sunlight-lexicon` (`id`, `title_seo`, `title`, `content`, `time`) VALUES
(4, 'cylindr', 'Cylindr', 'Cylindr je jednotka dioptrické vady atigmatismu (tj. tvarová deformace oka). ', '1326308300'),
(5, 'astigmatismus', 'Astigmatismus', 'Atigmatismus je oční vada, která deformuje vidění člověka. Postižený vidí bod jako rozmazanou čáru.', '1326308665'),
(6, 'rohovka', 'Rohovka', 'Rohovka je průhledná část oka, která disponuje obrovskou dioptrickou mohutností a slouží k lepšímu vidění člověka. ', '1326311319'),
(7, 'cykloplegie', 'Cykloplegie', 'Cykloplegie je stav oka, kdy jsou vyřazené okohybné svaly aje možné vyšetřit úplnou refrakční složku.', '1326398567'),
(8, 'oko', 'Oko', 'Oko je párový orgán se kterým získáváme 80% všech informací. ', '1326982064'),
(9, 'skleroplastika', 'Skleroplastika', 'Skleroplastika je zpevnění oka pomocí implantace dárcovských štěpů okolo skléry a vyvolání kontrolovaného zjizvení. ', '1327017488'),
(10, 'glare', 'Glare', 'Glare je nežadoucí jev po laserovém refrakčním zákroku. Glare se snadno pozná velmi jasným světlem kolem obrazů. ', '1327792807'),
(11, 'katarakta', 'Katarakta', 'Katarakta je latinské označení pro šedý zákal. Tato vada způsobuje zakalení přírodní čočky, jediná účinná léčba je výměna za umělou čočku. ', '1328177625'),
(12, 'akomodace', 'Akomodace', 'Akomodace je schopnost oka zaostřovat na blízké předměty pomocí očních svalů. ', '1328177715'),
(13, 'aberace-vyssiho-radu', 'Aberace vyššího řádu', 'Aberace vyššího řádu jsou miniaturní odchylky v optickém aparátu oka. ', '1328178068');
Jestli chceš, pošlu ti to PM přístupy, ať neztrácíš čas.
URL jsem zkoušel přepsat přes .htaccess (natvrdo) ale vrací se 404, mod_rewrite mi nejde.
$item = DB::row(DB::query("SELECT * FROM `" . _mysql_prefix . "-lexicon`" . (isset($_GET['id']) ? " WHERE id=".intval($_GET['id']) : '')));upravit$item = DB::row(DB::query("SELECT * FROM `" . _mysql_prefix . "-lexicon`" . (isset($_GET['t']) ? " WHERE title_seo='".DB::esc($_GET['t'])."'" : '')));a do htaccess pridat nakonecRewriteRule ^lexikon~(.*) /index.php?_rwp=lexicon&t=$1 [L,QSA]s tím že stránka http://www.vaszrak.cz/cizi-slovo?id=5by měla mít alias lexicon, případně si upravit htaccess tak jak potrebujes.
No a tady http://www.vaszrak.cz/lexikon-pojmu?chr=A je potřeba upravit skript aby generoval odkazy s tou vlnovkou.

Bohužel jsem nemohl použít tvar s lomítkem, protože by se kvůli tomu musel upravovat system aby se správně načítaly css a genrovaly odkazy, ale myslím, že vlnovka je také v pohodě, nebo ne?? Možná by se dala použít i pomlčka, ale toho se mi neovedlo dosáhnout, protože je ve standardních aliasech a tenhle příkaz:RewriteCond %{REQUEST_URI} ^/([0-9a-zA-Z\.\-_]+)$ [NC]mi vždycky spojil _rwp s t.
Možná poradí někdo kdo má přepisovací pravidlá lépe zmáknuté než já.
Díky moc Honzo, je to perfektní. 🙂
Do pravidla jsem dosadil delší pomlčku viz. http://cs.wikipedia.org/wiki/Poml%C4%8Dka (netušil jsem, že jich je tolik) a funguje bez problémů.