mod_rewrite

Z Wikipedie, otevřené encyklopedie

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[editovat | editovat zdroj]

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[editovat | editovat zdroj]

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[editovat | editovat zdroj]

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[editovat | editovat zdroj]

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:

  1. podmínku, do které když daná URL (nebo i jiné proměnné) spadají, tak poté bude přepisovat/interpretovat
  2. pravidlo, jak URL přepsat/interpretovat

RewriteCond a porovnávání[editovat | editovat zdroj]

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[editovat | editovat zdroj]

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[editovat | editovat zdroj]

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[editovat | editovat zdroj]

Externí odkazy[editovat | editovat zdroj]