Tijdschrift voor webwerkers » Artikel #138
Je ziet ze steeds vaker op het wereldwijde web. De meeste moderne, opensource weblog- en content management systemen bieden er ondersteuning voor. Bij statische websites zijn ze eenvoudig te implementeren via mappen en index.html bestanden. Maar waarom gebruiken we die vriendelijke URL’s eigenlijk? En hoe zet je ze nou zelf in voor je eigen, dynamische website?
Een vriendelijke URL is herkenbaar en leesbaar, zoals bijvoorbeeld die van dit artikel: http://www.naarvoren.nl/artikel/vriendelijke_urls/ Het lijkt haast vanzelfsprekend om je website op deze manier te structureren, maar in de praktijk gebeurt het vaak niet. Zo kun je bijvoorbeeld ‘PPK on Javascript’ bij Bol.com bestellen via deze onvriendelijke URL:
Het gebruik van vriendelijke URL’s is een webrichtlijn van de Nederlandse overheid. En dat is natuurlijk niet voor niets! Het gebruik van deze URL's heeft veel voordelen. Zo zijn ze bij goed gebruik:
Omdat de URL vrij van rare woorden, leestekens en getallenreeksen is, kan vrijwel iedereen het adres van de pagina onthouden. Het vermindert direct ook de mogelijkheid tot fouten bij het overtypen van het adres.
Een vriendelijke URL geeft de navigatiestructuur en onderlinge relaties in een website weer. Om nog een keer de URL van dit artikel (http://www.naarvoren.nl/artikel/vriendelijke_urls/) te gebruiken: vriendelijke_urls
is een van de onderdelen van het artikel
-gedeelte van deze website.
We kunnen er vanuit gaan dat we via http://www.alistapart.com/contact/ in contact kunnen komen met de redactie van A List Apart.
Door de leesbaarheid en de hiërarchie zullen zoekmachines eerder waarde aan vriendelijke URL’s toekennen dan aan onvriendelijke URL’s met onduidelijke woorden of ingewikkelde querystrings.
Daarnaast tellen de woorden in de URL gewoon mee in het toekennen van waarde aan een pagina. Zo maakt deze pagina – zodra hij geïndexeerd is – door zijn URL een goede kans om eerder op "vriendelijke urls" gevonden te worden dan pagina’s waarbij vriendelijke_urls
(of een variant daarop) niet in de URL voorkomt.
Genoeg introductie! De voordelen zijn duidelijk, maar hoe implementeren we dit nu precies in onze eigen, met PHP gebouwde website? In ‘Aan de slag met .htaccess’ heb je al iets kunnen lezen over het gebruik van Apache’s mod_rewrite-module. Met die module kun je hele specifieke rewrite-regels voor je website schrijven, maar in deze opzet heb je aan een paar regels al voldoende.
Het .htaccess voorbeeld hieronder werkt als volgt: bij bestaande mappen of bestanden gebeurt er niks. Dit is handig, want op deze manier werken onze CSS-bestanden, afbeeldingen, etc. allemaal normaal. Bij niet bestaande bestanden of mappen wordt de aangevraagde URL als een variabele genaamd 'q' (index.php?q=
) doorgespeeld naar onze index.php
<IfModule mod_rewrite.c>
RewriteEngine On
# bestaande mappen of bestanden
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.* - [L]
# niet-bestaande mappen of bestanden
RewriteRule ^(.*)/? index.php?q=$1 [L]
</IfModule>
Als een bezoeker nu bijvoorbeeld http://www.4rn0.nl/vriendelijke-urls/ intypt, gebeurt er niets bijzonders: vriendelijke-urls
is namelijk een bestaande map. De map onvriendelijke-urls
bestaat echter niet, dus als een bezoeker http://www.4rn0.nl/onvriendelijke-urls/ intypt treedt mod_rewrite in werking en wordt achter de schermen de URL http://www.4rn0.nl/index.php?q=http://www.4rn0.nl/ onvriendelijke-urls/
aangevraagd.
Aangekomen in de index.php brengen we allereerst de aangevraagde URL in kaart. Je kan het onderstaande stukje code rechtstreeks in het bestand zetten of (bij voorkeur) verder verwerken in een functie of class.
<?php
// verdeel de URL in zijn verschillende componenten
$request = parse_url($_GET['q']);
// we nemen alleen het pad, zonder de eventuele slash op het einde
$path = rtrim($request['path'], '/');
?>
Het pad van de aangevraagde URL wordt met deze code opgeslagen in de variabele $path
. In dit voorbeeld is dat dus onvriendelijke-urls
. Met een eenvoudige switch
kunnen we vervolgens bepalen welke pagina we gaan tonen. Iedere case
in de switch
staat voor een pagina (Let op: voor een ‘home’ pagina gebruik je een lege case
). Omdat mod_rewrite in werking treedt bij niet bestaande mappen en bestanden, is het noodzakelijk om zelf 404-foutmeldingen te genereren. Dit doen we met de default
case.
Houd de hiërarchie van je navigatiestructuur trouwens in de gaten! Als onvriendelijke-urls/niet-doen
bestaat, dan zou logischerwijs onvriendelijke-urls
(één niveau hoger) ook moeten bestaan!
<?php
switch ($path) {
case '':
// code om de 'home' pagina weer te geven
break;
case 'onvriendelijke-urls':
// code om de 'onvriendelijke-urls'
// pagina weer te kunnen geven
break;
case 'onvriendelijke-urls/niet-doen':
// code om de 'onvriendelijke-urls/niet-doen'
// pagina weer te kunnen geven
break;
default:
// code om 404 fouten te genereren
break;
}
?>
Hoe je een pagina uiteindelijk wil tonen staat vrij: je kan via echo
de HTML rechtstreeks de pagina inschrijven, je kan gebruik maken van een include
om statische HTML pagina’s tevoorschijn te halen of je kan zelfs een compleet PHP / MySQL systeem ervoor inrichten. In het voorbeeld hierboven zijn alle case
mogelijkheden van te voren bekend, maar dit zou ook uit een database kunnen komen in een systeem waar men zelf pagina's kan aanmaken en de navigatiestructuur kan bepalen.
houdt zich als zelfstandig ondernemer onder de naam 4rn0 afwisselend met de client- en serverside van websites bezig.
Publicatiedatum: 09 mei 2007
Naar Voren is op 18 juli 2010 gestopt met publiceren. De artikelen staan als een soort archief online. Het kan dus zijn dat de informatie verouderd is en dat er inmiddels veel betere of makkelijkere manieren zijn om je doel te bereiken.
Copyright © 2002-heden » NAAR VOREN en de auteurs