BI-VWS Vybrané partie z administrace Webového Serveru Přesměrování (redirect/rewrite) uvnitř Apache httpd Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti 1
Obsah mod_alias redirect Základní direktivy Příklady použití mod_rewrite Principy Základní direktivy Konfigurace Příklady použití 2
Přesměrování / Přepisování URL Přesměrování probíha ve webspace Odpovědí je informace o změně URL, reakce je závislá na klientovi Přepisování probíhá ve webspace nebo filesystému Odpovědí je informace o změně URL (reakce je na klientovi) nebo soubor (na základě přepsání) Přesměrování používá stavové kódy 3xx 301 trvale přesunuto 303 nahrazeno 305 použít proxy 302 dočasně přesunuto 307 dočasné přesměrování Jednoduché (statické) přesměrování mod_alias Podmíněné (dynamické) přesměrování mod_rewrite 3
mod_alias Direktivy Redirect přesměrovává klienta ze starého URL na nové RedirectMatch přesměrovává klienta na základě RE RedirectTemp (= Redirect temp) RedirectPermanent (= Redirect permanent) Syntaxe Redirect [status] URLpath newurl Výchozí stavový kód (status): 302 permanent = 301 temp = 302 seeother = 303 gone = 410 (zdroj již neexistuje, nepoužívá se část newurl) Kontext: server, virtualhost, <Directory>,.htaccess Direktivy Redirect mají přednost před Alias, ScriptAlias 4
mod_alias příklady Přesměrování cesty /other ze serveru www.mycorp.em na server www.othercorp1.em Redirect permanent /other www.othercorp1.em/ Přesměrování všech požadavků končících.htm na požadavky končící na.html (pro server www.mycorp.em) RedirectMatch (.*)\.htm$ www.mycorp.em$1.html Přesun DocumentRootu - přesměrování požadavku na / (kořen) na adresář /about/ RedirectMatch ^/$ http://www.mycorp.em/about/ 5
mod_rewrite I Součástí standardní instalace Umožňuje přesměrování na základě pravidel a podmínek Libovolný počet pravidel (RE, LE) Libovolný počet podmínek (and, or) Možné řetězení pravidel Vnitřní přesměrování (rewrite URL FS) Vnější přesměrování (rewrite URL URL) Jednoduché případy lze nahradit pomocí Redirect (mod_alias) Přepisovací pravidla se nedědí (je potřeba dědění povolit) 6
mod_rewrite II 2 háčky (hooks) při zpracování požadavku URL-to-filename translation hook Fixup hook 7
mod_rewrite základní direktivy I Povolení přepisování RewriteEngine on off Kontext: server, virtual host, directory,.htaccess Přepisovací pravidla RewriteRule Pattern Substitution [flags] RewriteRule ^/somepath(.*) /otherpath$1 [R] Podmínky pravidel RewriteCond TestString CondPattern RewriteCond %{TIME_HOUR}%{TIME_MIN} >0700 RewriteCond %{TIME_HOUR}%{TIME_MIN} <1900 8
mod_rewrite základní direktivy II Nastavení dědění z nadřazené úrovně RewriteOptions Options RewriteOptions inherit Logování nastavení souboru RewriteLog file-path RewriteLog /var/log/apache2/rewrite RewriteLog /dev/null (! nevypíná logování!) Logování nastavení úrovně RewriteLogLevel level Rozsah: 0 9, default: 0, >2 pouze pro ladění RewriteLogLevel 2 9
mod_rewrite substituce Syntaxe: RewriteRule Pattern Substitution [flags] Substituce Cesta (file-path): /var/www/new Adresa (URL-path): /img Absolutní URL: http://www.mycorp.em/new Nic (polčka): Zpětné reference $N N-tý podvýraz v RewriteRule %N N-tý podvýraz v RewriteCond %{VARNAME} proměnná serveru ${mapname:key default} mapovací funkce 10
mod_rewrite příznaky chain C zřetězí s dalším pravidlem env E=VAR:VAL nastavuje proměnnou prostředí forbidden F vrací odpověď Forbidden last L poslední pravidlo (další nezpracovává) next N zpracuje další pravidlo nocase NC zpracovává bez ohledu na velikost noescape NE nepřevádí speciální znaky na %xx proxy P vynucuje použití proxy passthrough PT pošle na další zpracování qsappend QSA připojí výsledek za query string (?) redirect R [=code] vynucuje externí přesměrování skip S=num přeskočí dalších num pravidel type T=MIME-type nastavuje MIME typ 11
mod_rewrite RewriteBase Při přepisování uvnitř <Directory> nebo.htaccess se vzor pravidla týká pouze daného adresáře Po náhradě se přidá cesta k adresáři (skutečná) Pokud předtím došlo k náhradě a skutečná cesta neodpovídá požadavku, použije se direktiva RewriteBase RewriteBase URL-path Kontext: directory,.htacces 12
mod_rewrite mapy Direktiva RewriteMap definuje mapu pro přepis Typy map txt textový soubor rnd textový soubor s náhodným výběrem dbm binární soubor int interní funkce prg externí program Použití v RewriteRule (substituci) ${ MapName : LookupKey } ${ MapName : LookupKey DefaultValue } RewriteMap examplemap txt:/path/to/file/map.txt RewriteRule ^/ex/(.*) ${examplemap:$1} 13
http://httpd.apache.org/docs/2.2/ rewrite/rewrite_guide.html Příklady použití http://httpd.apache.org/docs/2.2/ rewrite/rewrite_guide_advanced.html 14