Tutorials

Mod_rewrite vriendelijke URL adressen

Uitleg over vriendelijke URL adressen (mod rewrite / multiviews). Krijg i.p.v. http://www.phphulp.nl/script.php?cat=3&id=25&pid=424 vriendelijke http://www.phphulp.nl/script/3/25/424/ URL adressen.

Pagina 1

Voorbereidingen

In deze tutorial ga ik je dus uitleggen hoe je vriendelijke URL adressen krijgt. Mijn definitie van vriendelijke URL adressen zijn URL adressen die ‘Query Strings’ (de variabelen die worden meegestuurd) niet meer zichtbaar maakt. Let op dat je dit resultaat ook zonder de module mod_rewrite kunt behalen door je URL adressen te strippen via bijvoorbeeld de explode() functie.

Zonder mod_rewrite:
http://www.phphulp.nl/script.php?cat=3&id=25&pid=424

Met mod_rewrite:
http://www.phphulp.nl/script/3/25/424/

Er zijn echter wel enkele eisen. Ten eerste moet je Apache geïnstalleerd hebben met de module mod_rewrite. Ten tweede moet je toegang hebben (of iemand die je daarmee kan helpen) tot een .htaccess bestand.

Om Apache te installeren met de module mod_rewrite kun je het volgende gebruiken:

./configure
--enable-module=rewrite
--enable-shared=rewrite


Deze regels dienen alleen voor de module mod_rewrite. Let dus op dat wanneer je Apache (opnieuw) installeerd, deze en meer opties meeneemt bij ./configure. Deze opties moet je zelf kiezen, ik kan je hier niet mee helpen. Ik weet niet hoe dit precies bij Windows zit. Hier heb ik mod_rewrite nog nooit op geprobeerd. Ik denk dat deze module gedownload kan worden als appart .dll bestand misschien?

In de config file van Apache (httpd.conf) moet ook het volgende aanwezig zijn:

<Directory /www/htdocs/joudomein>
AllowOverride All
</Directory>


Heb je geen toegang tot httpd.conf, wees dan niet getreurd. Meestal staat dit gewoon goed en kun je deze tutorial volgen.
Pagina 2

URL vriendelijke pagina's maken

Nadat je zeker weet dat Apache geconfigureerd is met de module mod_rewrite, dat er AllowOverride All bij <directory> in de httpd.conf staat en dat je toegang hebt tot .htaccess kunnen we gaan beginnen een Rewrite regel in de .htaccess file te schrijven.

Een mod_rewrite regel moet er als volgt uit zien:

RewriteEngine On
RewriteRule ^php/tutorials/(.*)/(.*)/ php/tutorials.php?cat=$1&id=$2


RewriteEngine On
Deze eerste regel start de module mod_rewrite.

RewriteRule
Hier start je de rewrite regel

^php/tutorials/(.*)/(.*)/
Hier geef je aan dat waneer de url www.joudomein.nl/php/tutorials/iets/iets/ wordt opgevraagd, de eerste en tweede (.*) worden doorgegeven in het tweede gedeelte van de RewriteRule.

php/tutorials.php?cat=$1&id=$2
Dit is het laatste gedeelte. $1 is de eerste (.*) en $2 is de tweede (.*) van het vorige gedeelte.

Wanneer je nu dus het URL adres http://www.joudomein.nl/php/tutorials/5/10/ aanvraagt, zal mod_rewrite ervoor zorgen dat je onzichtbaar (vriendelijk) wordt 'doorgestuurd' naar http://www.joudomein.nl/php/tutorials.php?cat=5&id=10.

Ook kun je hier later meer mee spelen door in plaats van id- en categorie nummers werkelijke namen door te spelen in je url. Laten we zeggen dat 3 -> berekeningen is. Als je je website dan opvraagt als http://www.joudomein.nl/php/tutorials/berekeningen/43/ lijkt dit alweer een stuk beter dan dat het alleen maar nummers zijn. Ik zou dit in een later stadium proberen want eerst wil je natuurlijk gewoon dat het werkt zonder moeilijk te doen!

Dit is eigenlijk alles. Onvoorstelbaar niet? Toch kunnen er zich nog enkele problemen voordoen waar ik toen der tijd ook tegenaan liep. Ga naar het volgende hoofdstuk!
Pagina 3

Voorkomende problemen

De volgende problemen heb ik zelf ervaren toen ik er net mee bezig was.

404 Pagina’s bij het opvragen van een mod_rewrite URL
Dit kwam bij mij, doordat ik of 1, of 2, of 3 variabelen gebruikte in een URL adres. Wanneer ik alleen 1 variabele gebruikte, en ik had er 3 in de RewriteRule gedefineerd, kreeg ik een 404 error pagina. Dit kun je oplossen door 3 verschillende rewrite rules te maken. Let op dat je bovenin de .htaccess file rekening houdt met eerst 3, dan 2 en dan 1 variabele.

RewriteRule ^php/tutorials/(.*)/(.*)/(.*)/ php/tutorials.php?cat=$1&id=$2&pid=$3
RewriteRule ^php/tutorials/(.*)/(.*)/ php/tutorials.php?cat=$1&id=$2
RewriteRule ^php/tutorials/(.*)/ php/tutorials.php?cat=$1

Nog steeds 404 pagina’s bij het opvragen van een mod_rewrite URL
Dit kan komen door dat je ‘slordig’ bezig bent met de slashes. Zorg ervoor dat je linkt naar een URL adres zoals deze:

http://www.joudomein.nl/php/tutorials/5/12/25/

In plaats van:

http://www.joudomein.nl/php/tutorials/5/12/25
Het verschil is dus dat deze geen slash aan het einde heeft en de andere wel

Wanneer je hier niet afhankelijk van wilt zijn, kun je ook nog meer regels toevoegen in je .htaccess file. Het zou er dan als volgt moeten uitzien:

RewriteRule ^php/tutorials/(.*)/(.*)/(.*)/ php/tutorials.php?cat=$1&id=$2&pid=$3
RewriteRule ^php/tutorials/(.*)/(.*)/(.*) php/tutorials.php?cat=$1&id=$2&pid=$3
RewriteRule ^php/tutorials/(.*)/(.*)/ php/tutorials.php?cat=$1&id=$2
RewriteRule ^php/tutorials/(.*)/(.*) php/tutorials.php?cat=$1&id=$2
RewriteRule ^php/tutorials/(.*)/ php/tutorials.php?cat=$1
RewriteRule ^php/tutorials/(.*) php/tutorials.php?cat=$1


Hiermee defineer je dus regels met en zonder slash op het eind.

Controleren of mod_rewrite wel geïnstalleerd is
Je kunt dit controleren door een leeg php bestand aan te maken met de volgende regel:

<?
phpinfo();
?>

Roep dit script aan en scroll naar het Apache gedeelte. Hierin zie je een kolom met modules. Hier tussen moet ook de module mod_rewrite staan. Wanneer deze hier niet staat, heb je mod_rewrite niet geïnstalleerd.

Ik wens je veel succes en sterkte met het gebruiken van mod_rewrite.

Reacties

0
Nog geen reacties.