Představte si web, který má dostupné vekeré (!) podstránky z hlavního souboru "index.php", například můe tento web obsahovat stránky jako
www.example.cz/index.php?stranka=uvod
A z těchto nehezkých stránek ná .htaccess vytvoří pěkný web ve stylu:
www.example.cz/index.php?stranka=autor
www.example.cz/index.php?stranka=novinky
...
www.example.cz/uvod.htm
a právě tento jednoduchý převod adres řeí tento obsah .htaccess:
www.example.cz/autor.htm
www.example.cz/novinky.htm
...
Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_URI} ^(.*).htm
RewriteRule ^(.*).htm index.php?stranka=$1 [nc,L,QSA]
První řádek jen povoluje sledování symbolických odkazů. Tento řádek je tam dost moná zbytečně, kdy Vám to bude fungovat bez něj, klidně ho smate.
Druhý řádek povoluje mod_rewrite pro daný adresář (a podadresáře - pokud neobsahují vlastní htaccess, který by to zakazoval).
Třetí řádek určuje podmínku. Pokud je tato podmínka splněna, provede se nahrazení adresy dle následujícího pravidla.
Na čtvrtém řádku je pravidlo nahrazení, které určuje, jak se vytvoří nová adresa z té obdrené.
Při kadém poadavku o stránku se prochází soubor .htaccess, a to jetě dříve, ne se zkoumá, zda poadovaná stránka fyzicky existuje. Proto je moné místo neexistující stránky podstrčit nějakou jinou.
V htaccess je určeno podmínkou, e pokud %{REQUEST_URI}, co je jméno poadované stránky, odpovídá regulárnímu výrazu ^(.*).htm, provede se nahrazení. Tedy v naem případě se vezme jméno poadovaného souboru mimo koncovky a dosadí se do adresy (index.php?stranka=$1) právě za $1. Tím vznikne z poadované stránky uvod.htm stránka index.php?stranka=uvod.
Ony parametry v hranatých závorkách určují jakým způsobem se to bude chovat. Podrobněji o parametrech. Pokud byste do parametrů přidali například [R=301], jednalo by se o trvalé přesměrování a adresa v adresním řádku by se vdy změnila.
Důleité je poznamenat, e pouitím tohoto htaccess souboru se budou podstrkávat úplně vechny .htm stránky! Pokud si tedy vytvoříte nějakou skutečnou stránku s koncovkou .htm, nepůjde se k ní z venku dostat - vdy se přesměruje do index.php?stranka=neco. Nejjednoduím způsobem řeení tohoto problému je pouívat pro ostatní skutečné stránky koncovku .html, na kterou ji pravidlo v htaccess neplatí.
Samozřejmě moností pro vytvoření podmínky je spousta a ony zmíněné regulární výrazy umoňují doslova zázraky, dalím monostem a rozířením se budu věnovat v dalích dílech.
O tom jak udělat php web se zde zmiňovanou funkčností pojednává článek: Jádro dynamického webu
Starí komentáře pod tímto článkem byly pro přehlednost přesunuty na samostatnou stránku: starí dotazy a odpovědi - třeba tam najdete co Vám není jasné atd.
RewriteCond %{REQUEST_URI} detail-firmy//(.*)//
RewriteRule detail-firmy//(.*)// /firmy-detail.php?firma=$1 [nc,L,QSA]
#Options +FollowSymlinks
[1] J.B. (bartonova.xf.cz) dne 10.01.2009:
Článek je skvělý, ale mně pořád přepis adresy nejde :(Vytvořila jsem si soubor .htaccess a zkopírovala vá kód a jetě místo index.php?stranka jsem napsala index.php?page. Nic víc. Se souborem .htaccess vůbec nemám zkuenosti a kdy jsem se ho snaila vytvořit dle vaeho návodu, tak tavr adresy se stále nemění. Prosím o radu!
Děkuji moc ;)