Mod_rewrite on Apache lisamoodul, mis võimaldab aadresse ümber kirjutada. Näiteks selle asemel et kasutada
http://koduleht.ee/index.php?sektsioon=uudised&id=21
võib olla hoopis
http://koduleht.ee/uudised/21
Ava tekstiredaktoriga ketas:/apache/asukoht/conf/httpd.conf
Otsi sealt välja
<Directory "c:/sinu/document_root">
Ja veendu, et seal oleks Options-is määratud FollowSymLinks ning
AllowOverride All
Järgmiseks kaota trellid selle rea eest
LoadModule rewrite_module modules/mod_rewrite.so
Oletame et document_root kataloogiks on c:/htdocs
Tekitame selle alla kataloogi „mod_rewrite“, ehk siis → c:/htdocs/mod_rewrite
Ning selle sisse teeme .htaccess fail, sisuga
Options +SymLinksIfOwnerMatch
<IfModule mod_rewrite.c>
RewriteEngine On
#RewriteBase "/base/path/"
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>
Järgmiseks teeme index.php faili, mille sisuks on
<?php print_r($_GET);?>
Nüüd kui panna aadressiribale http://localhost/mod_rewrite/suvaline/fail.txt siis juhul kui kõik õnnestus väljastatakse
array('q'=>'suvaline/fail.txt')
rewrite rule muutujad
R[=KOOD]
Koodid:
301 kolinud jäädavalt 302 kolinud ajutiselt 403 keelatud ligipääs 404 ei leitud 410 läinud
F forbidden (saadab 403 päise) G läinud (asja enam ei ole) P vahemälubuffer L viimane ruul N järgmine (alustab uuesti ruule) C Chain (ahel?) T=mime tüüp NS alampäringu korral jätab vahele NC tõstutundetu QSA jätka päringurida (//query string//) NE keelab väljundi põgemise PT läbi suunamine S=x jätab järgnevalt x asja vahele E=var:value seab keskkonnamuutuja
NC tõstutundetu OR rule kehtib kui üks tingimustest tõene
Kuna mod_rewrite kasutab regulaaravaldisi siis tasuks tutvuda ka nendega.
Vorming:
%{MUUTUJA_NIMI}
HTTP päises HTTP_USER_AGENT HTTP_REFERER HTTP_COOKIE HTTP_FORWARDED HTTP_POST HTTP_PROXY_CONNECTION HTTP_ACCEPT
Päringus
REMOTE_ADDR REMOTE_HOST REMOTE_USER REMOTE_IDENT REQUEST_METHOD SCRIPT_FILENAME PATH_INFO QUERY_STRING AUTH_TYPE
Serveripoolelt
DOCUMENT_ROOT SERVER_ADMIN SERVER_NAME SERVER_ADDR SERVER_PROTOCOL SERVER_SOFTWARE
Ajaga seonduvad
TIME_YEAR TIME_MON TIME_DAY TIME_HOUR TIME_MIN TIME_SEC TIME_WDAY TIME
Eriväärtused
API_VERSION THE_REQUEST REQUEST_URI REQUEST_FILENAME IS_SUBREQ
Direktiivid
# Sait on lõplikult kolinud uuele domeenile
# domain.com --> domain2.com
RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC]
RewriteRule ^(.*)$ http://www.domain2.com/$1 [R=301,L]
# Leht on kolinud ajutiselt # domain.com/leht.htm --> domain.com/uus.htm RewriteRule ^leht.htm$ uus.htm [R,NC,L]
# Kenana näivad URLid (ilma küsimärgita) # domain.com/kategooria-nimi-1/ tuleb tõlgitsemisele aadressilt # domain.com/kategooriad.php?nimi=kategooria-nimi-1 RewriteRule ^([A-Za-z0-9-]+)/?$ kategooriad.php?nimi=$1 [L]
# Kenana näivad URLid (ilma küsimärgita) koos lehtedele jagamisega # domain.com/artiklid/pealkiri/5/ tuleb tõlgitsemisele aadressilt # domain.com/artiklid.php?nimi=pealkiri&leht=5 RewriteRule ^artikld/([A-Za-z0-9-]+)/([0-9]+)/?$ artiklid.php?nimi=$1&leht=$2 [L]
# peatab referer rämpspostid
RewriteCond %{HTTP_REFERER} (weight) [NC,OR]
RewriteCond %{HTTP_REFERER} (drugs) [NC]
RewriteRule .* - [F]
RewriteEngine On
# piltide hotlinkimise keelamine
RewriteCond %{HTTP_REFERER} !^http://www\.minuleht\.ee/ [NC]
RewriteRule .*\.(jpe?g|gif|png)$ - [F]
Kui tekivad probleemid ava ketas:/apache/asukoht/logs/error.log ning vaata, mis teated seal lõpus asuvad.
Kui mod_rewrite kasutamine ei ole võimalik siis võib kasutada globaalmuutuja $_SERVER['PATH_INFO'] abi: Olgu aadressiks nt http://web.zone.ee/sisuhaldus/index.php/page/kontakt siis järgnev koodilõik väljastab massiivi osadega array('page', 'kontakt'):
<?php // leiame skripti aadressi $url = $_SERVER['PATH_INFO']; // If for some reason $_SERVER["PATH_INFO"] does not work then // you could use $_SERVER["REQUEST_URI"] or $_SERVER["PHP_SELF"] // Eemaldane algusest /index.php/ osa $url = preg_replace('/^(\/)/','',$url); // Murrame aadressi kaldkriipsude kohalt juppideks $url = explode('/',$url); // Väljastame aadressi print_r($url); ?>