David22 Geplaatst: 5 december 2009 Rapport Geplaatst: 5 december 2009 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: 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.) 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: http://www.gtaforum.nl/topic/106706-tut-een-random-signature-welke-ook-werkt-op-het-forum/ Dit is eigenlijk een masker voor de volgende URL: http://www.gtaforum.nl/index.php?showtopic=106706/ 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: RewriteRule ^topic/(.*)/(.*)/ showtopic.php?topicnr=$1&uitlijning=$2 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: RewriteRule ^topic/(.*)/(.*)/ showtopic.php?topicnr=$1&uitlijning=$2 RewriteRule ^topic/(.*)/(.*) showtopic.php?topicnr=$1&uitlijning=$2 Veel succes met het maken van mooie URLs! David22 Reageren
Recommended Posts
Een reactie plaatsen
Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.