Om mod_rewrite in Apache te gebruiken, moet de rewrite engine geactiveerd worden met de aanwijzing RewriteEngine on. Hierop volgt de RewriteRule, die met behulp van zogenaamde reguliere expressies (‘regular expressions’, regex) de instructies voor het herschrijven van URL's definieert:
RewriteEngine on
RewriteRule ^/artikel/(.*)$ /a/index.php?title=$1
Als de RewriteRule een omleiding definieert, bevat deze twee parameters: het zoekpatroon en het doelpatroon.
- Zoekpatroon: Deze parameter beschrijft de URL's die moeten worden omgeleid. Een bepaalde voorwaarde wordt gedefinieerd in de vorm van een tekenreeks. Als aan deze voorwaarde is voldaan, vindt omleiding naar een URL plaats volgens het doelpatroon. In het voorbeeld staat het zoekpatroon in dit deel van de RewriteRule: ^/artikel/(.*
- Doelpatroon: Deze parameter beschrijft de URL waarnaar wordt omgeleid. Als de omleiding op server-niveau is geconfigureerd, wordt de volledige URL vervangen. Op directory-niveau in het .htaccess-bestand of in httpd.conf wordt alleen het pad vanaf de huidige directory vervangen. In het voorbeeld staat het doelpatroon in dit deel van de RewriteRule: /a/index.php?title=$1.
In onderstaande tabel zie je een toelichting van de reguliere expressies in ons voorbeeld:
Reguliere expressie | Toelichting |
---|
^ | Geeft het begin van een string aan. |
$ | Geeft het einde van een string aan. |
(.*) | Een placeholder voor elke string binnen een URL. De haakjes slaan de string op in een variabele. |
$1 | Een variabele waarmee kan worden teruggegrepen op de waarden die tussen de haakjes zijn opgeslagen. |
De RewriteRule ^/artikel/(.*)$ /a/index.php?title=$1 legt dus de regel vast, dat bij alle URL’s die beginnen met de string /artikel/(.*), dit deel wordt omgeschreven naar het dynamische URL-schema /a/index.php?title=$1, waarbij $1 staat voor de string die bij de placeholder (.*) hoort.
Als een internetgebruiker de statische URL http://voorbeeld.com/artikel/paginatitel in de webbrowser invoert, schrijft de webserver dit om naar de dynamische URL http://voorbeeld.com/a/index.php?title=paginatitel via mod_rewrite. Dit gebeurt intern en is onzichtbaar voor de gebruiker. In dit geval komen de placeholder (.*) en variabele $1 overeen met de tekenreeks paginatitel.
Moet de URL-rewriting gekoppeld worden aan bepaalde opties die het gedrag van mod_rewrite sturen, dan zet je deze na de RewriteRule tussen vierkante haakjes en (als er meerdere opties gelden) scheid je ze met komma’s. Op deze manier kun je ook externe omleiding via HTTP-statuscode realiseren. De onderstaande tabel toont een aantal opties voor de RewriteRule. Op de officiële website van de Apache Software Foundation vind je een volledige lijst.
Optie | Flag | Functie |
---|
Redirect | R | De flag [R] instrueert de webserver een externe omleiding via HTTP-statuscode 302 uit te voeren. Als een andere statuscode moet worden verzonden, wordt deze met een is-teken aan de flag toegevoegd (bijv.[R=301]). |
Forbidden | F | Geeft de webserver de opdracht om HTTP-statuscode 403 (Forbidden) naar de webbrowser te verzenden. |
Gone | G | Laat de webserver HTTP-statuscode 410 (Gone) naar de webbrowser sturen en markeert de betreffende pagina als niet meer beschikbaar. |
Last | L | Geeft de webserver opdracht om na de huidige RewriteRule geen volgende meer uit te voeren. |
Nocase | NC | Bij het controleren of een URL voldoet aan de eis voor rewriting, wordt niet gelet op hoofdletters en kleine letters. |
Chain | C | De volgende RewriteRule geldt alleen als de huidige voorwaarde is vervuld. |
Op basis van een dergelijke optie kan je een externe omleiding via HTTP-statuscode als volgt realiseren:
RewriteEngine On
RewriteRule ^oudepagina.html$ /nieuwepagina.html [R=301]
Naast RewriteRules kun je mod_rewrite gebruiken om zogenaamde RewriteConds te definiëren, waarmee websiteheerders aanvullende voorwaarden voor een URL-rewrite kunnen definiëren.
De RewriteCond staat vóór de RewriteRule en heeft deze syntaxis:
RewriteCond TESTSTRING CONDITION
De teststring bevat over het algemeen zogenaamde servervariabelen, gedefinieerd door een procentteken en accolades, zoals %{HTTP_HOST}. In onderstaande tabel zie je een aantal servervariabelen.
Servervariabele | Toelichting |
---|
HTTP_USER_AGENT | Heeft betrekking op de client die wordt gebruikt voor servertoegang. De variabele wordt meestal gebruikt om verschillende webbrowsers te voorzien van een geoptimaliseerde website. |
HTTP_HOST | Heeft betrekking op de hostnaam en kan waarden bevatten als domein.com, subdomein.domein.com of het IP-adres. |
SERVER_PORT | Heeft betrekking op de geadresseerde poort (bijv. 80 voor HTTP of 443 voor HTTPS). De variabele stelt websitebeheerders in staat bezoekers om te leiden naar een beveiligde verbinding. |
REMOTE_ADDR | Heeft betrekking op het IP-adres van de gebruiker die verbinding maakt met de webserver. Deze variabele wordt soms gebruikt om spam te blokkeren. |
Het volgende voorbeeld laat een RewriteCond zien, die een RewriteRule bindt aan het IP-adres van een gebruiker van de webserver:
RewriteCond %{REMOTE_ADDR} 173.45.68.79