Voorwaarden stellen met RewriteCond
Naast het gebruik van een RewriteRule zoals ik op voorgaande pagina's heb laten zien, kunnen we ook nog voorwaarden stellen aan een RewriteRule. Hier gebruiken we dan een RewriteCond voor.
Deze methode zou je bijvoorbeeld kunnen gebruiken om bezoekers door te sturen afhankelijk van de domeinnaam of bijvoorbeeld gebruikte browser. Ook kun je een bezoeker doorsturen naar een bepaalde directory en kun je voorkomen dat anderen direct naar plaatjes op jouw server linken (hotlinking).
Aan de RewriteCond kun je een tweetal flags meegeven. [NC] maakt de conditie hoofdletter ongevoelig en [OR] om meerdere condities te combineren. Daarnaast zijn er een groot aantal variabelen die je voor de condities kunt gebruiken.
Enkele voorbeelden daarvan zijn:
HTTP_USER_AGENT
HTTP_REFERER
HTTP_HOST
REMOTE_ADDR
REQUEST_URI
Een volledige lijst met variabelen vind je onder andere op de Mod Rewrite Cheat Sheet:
Voorbeeld 10: Gebruiker afhankelijke van domein doorsturen
2
3
4
5
RewriteBase /
RewriteCond %{HTTP_HOST} !^www.jouwsite.nl$ [NC]
RewriteRule ^(.*)$ http://www.jouwsite.nl/$1 [R,L]
Het volgorde van controleren van Apache is iets waar je even bij stil moet staan. Allereerst worden de RewriteRules getest op matches. Als dat positief is wordt er gekeken of er RewriteConds bij die RewriteRule horen en eventueel worden deze ook gecheckt. Pas als ook dat positief is zal de RewriteRule uitgevoerd worden. In alle andere gevallen zal Apache doorgaan naar de volgende RewriteRule.
In bovenstaand voorbeeld zou een url als http://jouwsite.nl/pagina.php voldoen aan de RewriteRule. Ook de RewriteCond is postief omdat de url niet in het jusite formaat staat en dus zal de RewriteRule uitgevoerd worden. Door de [R] flag zal de gebruiker dus doorgestuurd worden naar http://www.jouwsite.nl/pagina.php.
Voorbeeld 11: Urls doorsturen naar een andere directory
2
3
4
5
6
RewriteBase /
RewriteCond %{HTTP_POST} ^www.jouwsite.nl$ [NC]
RewriteCond %{REQUEST_URI} !^/site/ [NC]
RewriteRule ^(.*)$ /site/$1 [R,L]
In dit voorbeeld zal als aan het eerste gedeelte van de RewriteRule voldaan wordt een tweetal condities gecheckt worden. Allereerst wordt gecontroleerd of de HTTP_HOST gelijk is aan www.jouwsite.nl en vervolgens of het begin van de REQUEST_URI niet gelijk is aan /site/. Als dat zo is, wordt de gebruiker doorgestuurd naar de directory /site/.
Voorbeeld 12: Lokale gebruiker naar de online site sturen
2
3
4
5
6
RewriteBase /
RewriteCond %{HTTP_HOST} ^localhost$ [OR,NC]
RewriteCond %{REMOTE_ADDR} ^127.0.0.1$ [NC]
RewriteRule ^(.*)$ http://www.jouwsite.nl/$1 [R,L]
Als in dit geval blijkt dat de bezoeker de site lokaal probeert te bezoeken, wordt hij naar de online variant gestuurt. Dat een bezoeker lokaal werkt blijkt uit een HTTP_HOST die gelijk is aan 'localhost' of een ip-adres dat gelijk is aan 127.0.0.1.
Voorbeeld 13: Voorkomen van hotlinking
2
3
4
5
6
7
8
RewriteBase /
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !^http://jouwsite.nl$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.jouwsite.nl$ [NC]
RewriteCond %{HTTP_REFERER} !^http://123.123.123.123$ [NC]
RewriteRule ^.*$ http://www.jouwsite.nl/ [R,L]
Bezoekers worden naar de beginpagina van je site gestuurd als de hyperlink niet afkomstig is van http://jouwsite.nl, http://www.jouwsite.nl of van http://123.123.123.123. Als dit namelijk het geval is, weet je dat je te maken hebt met iemand die bestanden van jouw server op zijn site wil laten zien.
Inhoudsopgave
- Inleiding
- Vereiste instellingen
- Basis van Mod Rewrite
- Zoekmachine vriendelijke urls
- Flags in een RewriteRule
- Voorwaarden stellen met RewriteCond
- Slotwoord en referenties