Aadresside ilustamine (mod_rewrite)

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

mod_rewrite häälestamine Windows keskkonnas

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

mod_rewrite testimine

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')

täpsem ülevaade

rewrite rule muutujad

R[=KOOD]

Koodid:

301 kolinud jäädavalt
302 kolinud ajutiselt
403 keelatud ligipääs
404 ei leitud
410 läinud

RewriteRule lipud

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

RewriteCond lipud

NC tõstutundetu
OR rule kehtib kui üks tingimustest tõene

Kuna mod_rewrite kasutab regulaaravaldisi siis tasuks tutvuda ka nendega.

Serverimuutujad

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

  • RewriteEngine
  • RewriteOptions
  • RewriteLog
  • RewriteLogLevel
  • RewriteLock
  • RewriteMap
  • RewriteBase
  • RewriteCond
  • RewriteRule

Näiteid

# 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.

Välisviited

alternatiivne võimalus

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);
 
?>
 
aadresside_ilustamine.txt · Viimati muutnud: 2010/04/22 13:08 persoon laurik
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki