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:
http://phphulp.jorendewit.nl/files/mrcs_vars.png

Voorbeeld 10: Gebruiker afhankelijke van domein doorsturen

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
RewriteEngine On
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
RewriteEngine On
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
RewriteEngine On
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
RewriteEngine On
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.

« Lees de omschrijving en reacties

Inhoudsopgave

  1. Inleiding
  2. Vereiste instellingen
  3. Basis van Mod Rewrite
  4. Zoekmachine vriendelijke urls
  5. Flags in een RewriteRule
  6. Voorwaarden stellen met RewriteCond
  7. Slotwoord en referenties

PHP tutorial opties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.