Menu

Developers

Automatisch slash achter url

4 april 2011

Wij houden van mooie urls. Vandaar dat ons CMS (e-Grip) ook waar mogelijk mooie urls maakt. Hiermee kan de gebruiker zelf elk soort content op elke url ontsluiten. Zo kan een contactformulier op www.domein.nl/contact/ staan en de sitemap op www.domein.nl/sitemap/.

Ook is het mogelijk om meerdere niveaus te maken door middel van menu's. Zo kan een productcatalogus worden gemaakt waarin de producten zijn gegroepeerd binnen productcategorieƫn:
www.domein.nl/fietsen/bmx/
www.domein.nl/fietsen/bakfiets/
www.domein.nl/autos/opel/
www.domein.nl/autos/volvo/

Zoals je ziet eindigt elke url op een slash. Hoewel dezelfde content ook op de url zonder die laatste slash beschikbaar is, geven we de voorkeur aan de url met slash. Als een url zonder die slash wordt opgevraagd wordt de gebruiker automatisch geredirect naar de url met slash.

Om dat voor elkaar te krijgen hebben we een redirect rule ingesteld in Apache waarmee wordt gekeken of er een url wordt opgevraagd die niet eindigt op een slash en geen punt bevat. Dat laatste is bedoeld om geen redirect uit te voeren op 'bestanden' zoals stylesheets, javascripts en dergelijke.

De rewrite rule ziet er als volgt uit:

RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !.
RewriteRule ^(.+[^/])$ /$1/ [R,L]

De eerste regel zorgt dat de rewrite rule alleen van toepassing is op GET requests. De tweede en derde regel zorgen dat de rule niet van toepassing is als voor het request een fysieke map of bestand bestaat. De vierde regel checkt of er niet een punt in de request url zit. En zodra aan alle condities is voldaan wordt een rewrite rule aangezet voor alle urls die niet eindigen op een slash [^/]$, welke worden geredirect naar dezelfde url met een slash er achter aan.

Zo wordt een gebruiker doorgestuurd van www.domein.nl/fietsen naar www.domein.nl/fietsen/ maar niet van www.domein.nl/robots.txt naar www.domein.nl/robots.txt/

blog comments powered by Disqus

Nieuwsbrief ontvangen?

Velden met een * zijn verplicht

Like ons op Facebook

Klik hieronder om ons te liken op Facebook.