Ik had in mijn tutorial over Random Signatures mod_rewrite al vluchtig behandeld, maar nu wil ik er even wat dieper op ingaan, omdat het simpelweg een hele krachtige en bruikbare functie is.
Heeft mijn webhost mod_rewrite?
Voordat we beginnen, moet je weten of jouw webhost mod_rewrite ondersteund. Dit omdat de meeste (gratis) webhosts dit niet doen. Hoe doe je dit? Vrij simpel. Maak eerst een tekstbestand met de volgende inhoud:
Options +FollowSymLinks
RewriteEngine On
Maak dan een map aan op jouw webserver, en noem deze ModRewriteTest. Zet daar dit tekstdocument in, en noem hem .htaccess. Dit moet je doen via jouw FTP-programma, Windows Explorer geeft een foutmelding. Browse dan naar
http://www.JOUWWEBSITE.nl/ModRewriteTest/
, waarbij je wel kan raden van JOUWWEBSITE.nl is . Nu kunnen er twee dingen gebeuren:
Niets: Gefeliciteerd, mod_rewrite werkt!
Internal Server Error (500): Helaas, geen mod_rewrite voor jou. Regel eerst eens een host die deze functie ondersteund! (Dit doen veel gratis hosts helaas niet.)
Zo zie je de eerste URL veel vriendelijker is, dit is ook waar de kracht van mod_rewrite in ligt.
Doorverwijzen naar een interne URL
We beginnen weer met een lege .htaccess. Hierin beginnen we met het "zeggen" dat we mod_rewrite gaan gebruiken:
RewriteEngine On
Daarna gaan we een doorverwijs-regel toevoegen:
RewriteRule ^topic showtopic.php
Ja, het dakje hoort erbij - Werken met variabelen volgt later in de tutorial
Wat doet deze code?
RewriteRule: Zeggen dat we een doorverwijs-regel toevoegen
^topic: De url die opgevraagd wordt...
showtopic.php: ...wordt doorverwezen naar deze URL
Doorverwijzen naar een externe URL
Dit werkt op dezelfde manier als een interne URL, alleen verwijs je dan naar een adres welke begint met http://. Wil je bij het vorige voorbeeld doorverwezen worden naar GTAForum, in plaats van showtopic.php, verander je de regel dus in dit:
RewriteRule ^topic http://www.gtaforum.nl/
Hier post ik geen verdere uitleg bij, omdat ik er van uit ga dat dit wel duidelijk is met de uitleg die hierboven staat ^^
Werken met variabelen
De allergrootste kracht van mod_rewrite ligt toch wel in het feit dat je ook dynamisch kan doorverwijzen. In de eerste regel (waarin de URL die de gebruiker intypt staat) gebruik je op elk variabel punt een (.*). Dit teken valt het beste nog te omschrijven als "boeit niet wat er staat, we sturen het door naar de tweede regel". In de tweede regel (de "echte" URL) gebruik je een dollarteken met daarachter een cijfer. Welk cijfer hier staat, is de hoeveelste (.*) uit de eerste URL je wilt gebruiken. We pakken er weer een voorbeeld bij. Stel, we hebben een script welke een topic opvraagt (topicnummer) en een uitlijninsnummer. We gaan er maar even vanuit dat deze variabelen via de URL verzonden zijn.
"Echte" URL:
showtopic.php?topicnr=100&uitlijning=1
URL die we willen maken:
topic/100/1/
Nu moeten we alleen nog de RewriteRule maken. Deze komt er zo uit te zien:
Ik hoop dat dit met de uitleg hierboven en het voorbeeld duidelijk genoeg is, mocht dit niet zo zijn, laat een berichtje achter
Mocht je trouwens 404-pagina's krijgen terwijl jouw RewriteRule wel klopt, kan het komen doordat er fouten zijn met een / aan het einde van de URL. Het beste kan je dan twee RewriteRules toevoegen, een met een / aan het einde en eentje zonder:
Tutorial
mod_rewrite
Inleiding
Ik had in mijn tutorial over Random Signatures mod_rewrite al vluchtig behandeld, maar nu wil ik er even wat dieper op ingaan, omdat het simpelweg een hele krachtige en bruikbare functie is.
Heeft mijn webhost mod_rewrite?
Voordat we beginnen, moet je weten of jouw webhost mod_rewrite ondersteund. Dit omdat de meeste (gratis) webhosts dit niet doen. Hoe doe je dit? Vrij simpel. Maak eerst een tekstbestand met de volgende inhoud:
Maak dan een map aan op jouw webserver, en noem deze ModRewriteTest. Zet daar dit tekstdocument in, en noem hem .htaccess. Dit moet je doen via jouw FTP-programma, Windows Explorer geeft een foutmelding. Browse dan naar
, waarbij je wel kan raden van JOUWWEBSITE.nl is
. Nu kunnen er twee dingen gebeuren:
Niets: Gefeliciteerd, mod_rewrite werkt!
Internal Server Error (500): Helaas, geen mod_rewrite voor jou. Regel eerst eens een host die deze functie ondersteund! (Dit doen veel gratis hosts helaas niet.)
Andere manier (door Donald F. Duck)
Waar kan ik een werkend voorbeeld van mod_rewrite vinden?
Je kijkt er al naar. Kijk eens naar de adresbalk. Daar zal je zoiets vinden:
Dit is eigenlijk een masker voor de volgende URL:
Zo zie je de eerste URL veel vriendelijker is, dit is ook waar de kracht van mod_rewrite in ligt.
Doorverwijzen naar een interne URL
We beginnen weer met een lege .htaccess. Hierin beginnen we met het "zeggen" dat we mod_rewrite gaan gebruiken:
Daarna gaan we een doorverwijs-regel toevoegen:
Ja, het dakje hoort erbij - Werken met variabelen volgt later in de tutorial
Wat doet deze code?
RewriteRule: Zeggen dat we een doorverwijs-regel toevoegen
^topic: De url die opgevraagd wordt...
showtopic.php: ...wordt doorverwezen naar deze URL
Doorverwijzen naar een externe URL
Dit werkt op dezelfde manier als een interne URL, alleen verwijs je dan naar een adres welke begint met http://. Wil je bij het vorige voorbeeld doorverwezen worden naar GTAForum, in plaats van showtopic.php, verander je de regel dus in dit:
Hier post ik geen verdere uitleg bij, omdat ik er van uit ga dat dit wel duidelijk is met de uitleg die hierboven staat ^^
Werken met variabelen
De allergrootste kracht van mod_rewrite ligt toch wel in het feit dat je ook dynamisch kan doorverwijzen. In de eerste regel (waarin de URL die de gebruiker intypt staat) gebruik je op elk variabel punt een (.*). Dit teken valt het beste nog te omschrijven als "boeit niet wat er staat, we sturen het door naar de tweede regel". In de tweede regel (de "echte" URL) gebruik je een dollarteken met daarachter een cijfer. Welk cijfer hier staat, is de hoeveelste (.*) uit de eerste URL je wilt gebruiken. We pakken er weer een voorbeeld bij. Stel, we hebben een script welke een topic opvraagt (topicnummer) en een uitlijninsnummer. We gaan er maar even vanuit dat deze variabelen via de URL verzonden zijn.
"Echte" URL:
URL die we willen maken:
Nu moeten we alleen nog de RewriteRule maken. Deze komt er zo uit te zien:
Ik hoop dat dit met de uitleg hierboven en het voorbeeld duidelijk genoeg is, mocht dit niet zo zijn, laat een berichtje achter
Mocht je trouwens 404-pagina's krijgen terwijl jouw RewriteRule wel klopt, kan het komen doordat er fouten zijn met een / aan het einde van de URL. Het beste kan je dan twee RewriteRules toevoegen, een met een / aan het einde en eentje zonder:
Veel succes met het maken van mooie URLs!
David22