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 ●
●
Přepisování probíhá ve webspace nebo filesystému ●
●
●
●
Odpovědí je informace o změně URL, reakce je závislá na klientovi
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,
, .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 ●
●
Přesměrování všech požadavků končících .htm na požadavky končící na .html (pro server www.mycorp.em) ●
●
Redirect permanent /other www.othercorp1.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ř 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
Příklady použití ●
●
http://httpd.apache.org/docs/2.2/ rewrite/rewrite_guide.html http://httpd.apache.org/docs/2.2/ rewrite/rewrite_guide_advanced.html
14