mod rewrite - příklady
Co jsou ty další příznaky? (neboli flags) Jsou to další možnosti jak říct apach serveru jak s tímto pravidlem zacházet.
Jelikož je těchto flagů poměrně hodně, omezím se zde na ty nejpoužívanější.
- L - Poslední pravidlo, dále už nic nepřepisuj
- R (volitelně R=kod) - Přesměrování půjde s kódem, např.:R=302 (MOVED TEMPORARILY)
- T=(MIME TYPE) - MIME
- QSA - zachovej vše co je ve zdroji za otazníkem (např. paramtetry .php?neco=hodnota) Toto pravidlo, pokud jej vynecháte, může dlouho působit poměrně neplechu.
- NC - case insensitive, neboli nezáleží na velikosti písmen
- S - skip-přeskoč další pravidlo (volitelně S=počet)
- E=VAR:VAL - nastavení enviromental proměnných
- cookie|CO ? cookie :)
- .... a další a další
Jak je vidět, tak i pomocí těchto málo flagů lze vytvořit poměrně slušně i složité konstrukce. Více ale uvidíme na konkrétních příkladech.
Příklady: Na úvod si dáme velice jednoduchý příklad z praxe. Dejme tomu, že chcete přeložit nějakou Vaši zdrojovou stránku, na jinou cílovou stránku.
RewriteRule zdroj\\.html /cil\\.html
A co takhle rovnou celé domény:
RewriteCond %{HTTP_HOST} ^puvodni-domena.cz [NC]
RewiteRule ^(.*)$ http://www.nova-domena.cz/$1 [R=301,QSA,L]
Jak je patrné, dá se toto pravidlo použít i ke směrování na stránky jak s www, tak bez www.
Nebo se Vám nelíbí, že generujete nějakou stránku a má špatnou příponu? Třeba u hotových komponent pro XML (nebo pokud použijete jednoduše výpis PHP obsahu) je často výstup soubor s příponou definovanou serverem. Pokud tedy předáváte uživateli často takovéto soubory, ale napřed je upravujete například na .php, nebo rovnou XML, stačí přidat následující:
RewriteRule ^soubor\\.xml$ %{DOCUMENT_ROOT}/php/soubor.php
Jak je na první pohled patrné, tak se asi bez znalosti reg. výrazů asi neobejdete, takže pokud tápete, přečtěte si nejdříve něco o nich.
Pokud chcete například používat více hostů na serveru, pomůže Vám například něco takového:
RewriteCond %{REMOTE_HOST} ^host1.* [OR]
RewriteCond %{REMOTE_HOST} ^host2.*
V tomto příkladu je použitý ještě flag OR pro spojení pravidel.
Jak je vidět, jednoduché věci se dělají snadno, takže se podíváme na trochu komplikovanější příklady.
Pokud budete chtít například nasměrovat klienta čtenáře na správnou verzi stránek a chcete to udělat ještě před jejich vytvářením, použijte jednoduché pravidlo:
RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*
RewriteRule ^/$ /homepage.max.html [L]
RewriteCond %{HTTP_USER_AGENT} ^Lynx.*
RewriteRule ^/$ /homepage.min.html [L]
RewriteRule ^/$ /homepage.std.html [L]
Na ukázku je tam Lynx, ale může tam být například identifikace mobilu, PDA, atp.
Základ už je nyní asi jasný, takže si ukážeme další použitelný příklad z praxe:
Komprese:
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE text/html
BrowserMatch ^Mozilla/4\\.0[678] no-gzip
BrowserMatch \\bMSIE !no-gzip
#Header append Vary User-Agent
# nějaké další hlavičky pro různé klienty
# DeflateCompressionLevel 9
# DeflateFilterNote Input instream
# DeflateFilterNote Output outstream
# DeflateFilterNote Ratio ratio
Pokud si to všechno vyzkoušíte, tak asi brzo zjistíte, že udělat pomocí htaccess a modu rewirte takzvaná hezká URL není vůbec žádný problém. Jde to například tak, že si skriptu předáte požadovaný řetězec jako parametr. Skripty pak pracují naprosto normálně a uživatel může používat URL ve tvrau: http://rendlik.bloger.cz/recepty/Sladke-dobroty/Orechove-rohlicky (hned jsem na ně dostal chuť :) )
To je více méně vše, pokud přece jen chcete vědět něco více o modu rewrite (v angličtině z Apache webu)
Autor: mimi