Představte si web, který má dostupné veškeré (!) 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 možná zbytečně, když Vám to bude fungovat bez něj, klidně ho smažte.
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é obdržené.
Při každém požadavku o stránku se prochází soubor .htaccess, a to ještě dříve, než se zkoumá, zda požadovaná stránka fyzicky existuje. Proto je možné 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 požadované stránky, odpovídá regulárnímu výrazu ^(.*).htm, provede se nahrazení. Tedy v našem případě se vezme jméno požadovaného souboru mimo koncovky a dosadí se do adresy (index.php?stranka=$1) právě za $1. Tím vznikne z požadované 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 vždy změnila.
Důležité je poznamenat, že použitím tohoto htaccess souboru se budou podstrkávat úplně všechny .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 - vždy se přesměruje do index.php?stranka=neco. Nejjednodušším způsobem řešení tohoto problému je používat pro ostatní skutečné stránky koncovku .html, na kterou již pravidlo v htaccess neplatí.
Samozřejmě možností pro vytvoření podmínky je spousta a ony zmíněné regulární výrazy umožňují doslova zázraky, dalším možnostem 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 zkušenosti a kdy jsem se ho snažila vytvořit dle vašeho návodu, tak tavr adresy se stále nemění. Prosím o radu!
Děkuji moc ;)