mod_rewrite
mod_rewrite je přepisovací engine v podobě modulu HTTP serveru Apache. Apache tomuto modulu nechává zpracovat přicházející URL (adresy stránek), které klienti, komunikující se serverem, požadují; mod_rewrite je vyhodnocuje a na základě skriptu uloženém v souboru .htaccess řídí přesměrování, nastavuje stavové HTTP kódy a podobně.
Jazyk pro mod_rewrite
Obsah souboru .htaccess tvoří skript relativně jednoduché syntaxe, který může na jednom řádku obsahovat nejvýše jednu syntaxtickou jednotku – klíčové slovo s možným parametrem nebo parametry nebo poznámku, uvozenou znaky ##, kterou modul při zpracování souboru ignoruje.
Klíčová slova
Klíčová slova mají roli příkazů pro modul mod_rewrite – ovlivňují, co má modul dělat a podle jakých kritérií se rozhodovat. Mohou též nastavovat vnitřní proměnné prostředí (podobně jako direktivy v jiných skriptovacích nebo programovacích jazycích) nebo zjišťovat jejich hodnotu, porovnávat je apod.
Parametry
Některé příkazy vyžadují parametry, ty mohou sestávat z konstant, proměnných prostředí nebo se mohou prostřednictvím definovaných operátorů spojovat do složitějších výrazů. Velmi mocným nástrojem modulu je podpora regulárních výrazů, pomocí nichž je možno vybrat adresu z jakékoli množiny tvarů a ty pak zpracovat odlišně, podle potřeby.
Proměnné prostředí mohou být např. hlavičky HTTP, části URL požadovaného dokumentu, vnitřní proměnné serveru, proměnné připojení, proměnné času a proměnné zvláštního významu. Jejich syntaxe je %{JMÉNO_PROMĚNNÉ}, např. pro proměnnou REMOTE_ADDR, která vrací IP adresu klienta, je to %{REMOTE_ADDR}.
Podmínky a pravidla
Hlavní částí tohoto přepisovacího enginu je „přepisování“ (technicky vzato interpretace) požadovaného URL. K tomu slouží dva základní příkazy: RewriteCond a RewriteRule. (Samotný engine se nejdříve musí zapnout sekvencí příkazů Options +FollowSymLinks a RewriteEngine On.)
Pro samotné přepsání URL se musí modulu pomocí těchto příkazů definovat:
- podmínku, do které když daná URL (nebo i jiné proměnné) spadají, tak poté bude přepisovat/interpretovat
- pravidlo, jak URL přepsat/interpretovat
RewriteCond a porovnávání
Příkaz RewriteCond (z Rewrite Condition doslova přepisovací podmínka) definuje podmínku prostřednictvím dvou parametrů, které za ním následují a které se porovnávají. První většinou bývá buď samotná URL nebo její část v podobě proměnné (to, co se porovnává), a druhý parametr je to, vůči čemu se porovnává.
První jeden až dva znaky druhého parametru určuje jaké porovnávání vůbec použít (např. > pro „je větší než“, < pro „je menší než“, = pro „je rovno“, ^ pro „odpovídá následujícímu regulárnímu výrazu, ukončeném znakem $“, -f pro „existuje (jako soubor)“, atd). Těmto znakům může předcházet znak !, který neguje význam porovnávání.
RewriteRule
Příkaz RewriteRule určuje skutečné URL požadovaného dokumentu, který server zpracuje. Pomocí dvou parametrů, z nichž první může obsahovat regulární výraz, dokáže RewriteRule provést změnu třeba jen v určité části z požadované URL (např. adresáři v cestě nebo v určité subdoméně). Navíc, části regulárního výrazu prvního parametru, které jsou uzavřeny do oblých závorek; mohou být v druhém parametru odkazovány jako $1, $2, $3… (kde číslo za $ určuje pořadí výskytu otevírací závorky regulárního výrazu zleva doprava). Obdobně se lze identifikárory %1, .. %n odkazovat na regulární výrazy obsažené v RewriteCond (v oblých závorkách).
Řetězení a příznaky
RewriteCond a RewriteRule mohou mít i třetí parametr a to je pole příznaků (angl. flags, vlajek). Příkazů RewriteCond může být i více pod sebou a pak případný třetí parametr ovlivňuje, zdali je má k přesměrování dojít, je-li splněna alespoň jedna z podmínek za RewriteCond, nebo všechny…
U RewriteRule pole příznaků (oddělených čárkami, je-li jich více) může ovlivnit zřetězení s následujícím pravidlem nebo naopak ukončit vykonávání .htaccess po aplikování pravidla, vynutit u požadovaného dokumentu určitý status, korespondující s chybovým status kódem HTTP (např. gone, forbidden), nastavit proměnnou prostředí, MIME-type nebo dokonce cookie.
Související články
Externí odkazy
- (anglicky)Oficiální dokumentace (verze 2.0)