Een .htaccess bestand (met punt!) is een bestandstype zonder naam. Deze wordt gebruikt voor websites die op een Apache server draaien. Je kan hiermee bepaalde zaken uitvoeren en sommige (server-)instellingen wijzigen of omzeilen. Hieronder geven we u een aantal voorbeelden van .htaccess regels die veel gebruikt worden. Voordat een aantal zaken dient er te worden “gerewrite” maar eerste de algemene zaken.

Bepaalde IP nummers blokkeren
Wilt u een ip nummer tot de site blokkeren dan doet u dit met de volgende regels:

order deny,allow
deny from 12.34.56.78
deny from 78.56.34.12
allow from all

Volgorde is : eerst worden alle deny's uitgevoerd en dan pas de allows. Zo worden eerst de aangegenven IP nummers geblokkeerd en worden de andere toegestaan.

Toegang .htaccess blokkeren
Om te voorkomen dat men u .htacces kan bekijken kunt u de toegang blokkeren. U voegt dan de volgende script toe:

order allow,deny
deny from all

De bovenstaande regels gelden specifiek voor het .htaccess bestand. Uiteraard kan men ook andere bestanden en folders beschermd door middel van dezelfde regels.

Definieer het index bestand
Wanneer men de root of een specifieke folder opgevraagd zal de server zoeken naar het index bestand. Dit is het bestand wat getoond dient te worden als er geen bestand gedefinieerd is. Bijvoorbeeld: www.mijndomein.nl/uwfolder/. In de meeste gevallen staan op servers de volgende bestanden ingesteld: index.html, index.htm, default.asp (IIS), index.php (Apache). U kunt dit aanpassen op de volgende manier

DirectoryIndex willekeurig.html

Aangepaste foutmeldingen
De meeste servers hebben voor foutmelding hun standaard pagina ingesteld. Wilt u dit aanpassen naar een eigen look-en-feel (html pagina) van bijvoorbeeld een 404 pagina, dan kunt u dit doen op de onderstaande manier :

ErrorDocument 403 /fouten/geen-toegang.html
ErrorDocument 404 /fouten/niet-gevonden.html

Basic redirects
U kunt in .htaccess een aantal basic redirects stellen. Hier kunt wel of geen voorwaarden aan verbinden. Voor voorwaarden gebruikt u reguliere expressies . Hieronder een aantal voorbeelden

Redirect 301 /uwoudebestand.php http://www.mijndomein.nl/nieuwemap/uwnieuwebestand.php

Let op dat het tweede adres een volledig adres is, anders zal dit niet werken. De 301 is de redirect code voor een permanente redirect.

Zet de rewrite engine aan
De vorige waren de basic instelling. Nu kan de rewrite engine aangezet worden. Deze regels geven u de mogelijkheid om op basis van enkele gegevens (hostnaam, referer, bestandsnaam, querystring, methode) een rewrite/redirect te doen. Om de engine aan te zetten gebruikt u de volgende regel:

RewriteEngine on

Eén hostnaam voor uw website
Het kan wenselijk zijn in verband met SEO redenen om je website op 1 hostnaam beschikbaar te hebben. Hierdoor kan er geen duplicate content ontstaan omdat uw website op domein A en domein B geïndexeerd word. Ook wilt u niet dat uw website op zowel www.site.nl en site.nl geïndexeerd wordt. Om dit te voorkomen voegt u de volgende regels toe

RewriteCond %{HTTP_HOST} !^www\.mijndomein\.nl [NC]
RewriteRule ^(.*)$ http://www\.mijndomein\.nl/$1 [L,R=301]

Hiermee geeft u aan: als de hostnaam niet (de uitroepteken staat voor: niet) www.mijndomein.nl is dan moet er een 301 redirect gedaan worden naar www.mijndomein.nl. Met een paar extra instellingen als [NC] zegt u dat de case (hoofdletters/kleine letters) genegeerd kunnen worden. Met [L] zegt u dat deze laatste regel direct dien te worden uitgevoerd. De [R=301] geeft aan dat het geen rewrite maar een redirect moet zijn van het type 301 (permanent).

Oude domein / website redirecten
De bovengenoemde regels zijn bedoelt om een redirect alleen uitvoeren als het oude domein aan de nieuwe server gekoppeld word in de DNS. Hierdoor zullen alle verzoeken op 1 server worden afgehandeld. Wanneer dit niet mogelijk is kunt u een redirect op de oude server plaatsen. Deze redirect ziet er dan alsvolgt uit :

RewriteRule ^(.*)$ http://www\.mijndomein\.nl/$1 [L,R=301]

Extreme traffic redirecten
Het kan voorkomen dat uw website gelinkt wordt op een plek waar u niet blij van wordt omdat dit enorm veel dataverkeer kost en bezoekers brengt naar uw website die geen toegevoegde waarde hebben. Plaats in dit geval een aantal regels om al dit verkeer subtiel door te sturen:


RewriteCond %{HTTP_REFERER} deverkeerdesite\.nl [NC]
RewriteRule ^(.*)$ http://www.google.nl [L,R=302]

Bezoekers die dan vanaf deverkeerdesite.nl naar uw website worden doorgestuurd zullen nu doorgestuurd worden naar Google. Dit kan net het verschil zijn maken tussen een overload (server overbelast) en online blijven.

Redirecten van http naar https
Met de onderstaande code wordt al uw verkeer dat bestemd is voor http: naar https gestuurd:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Note this will redirect using the 301 'permanently moved' redirect, which will help transfer your SEO rankings.

Rewrite alles behalve...
In de meeste gevallen wordt de rewrite engine gebruikt om zogenaamde nette url's achter de schermen te herschrijven naar 1 bestand die verder alles afhandelt. Zo kunt u het adres /map/map2/bestand/ intern rewriten naar index.php?map/map2/bestand/:

RewriteRule ^(.*)$ /index.php?$1 [L]

Hieraan kunt u bepaalde voorwaarden verbinden: rewrite alle url's tenzij het een bestaande map of bestand is. Dit kunt u gebruiken om links naar bijvoorbeeld PDF bestanden niet te laten herschrijven maar gewoon te negeren:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?$1 [L]

Rewrite een bepaalde folder
Ook kunt u 1 bepaalde folder redirecten of rewriten. U beperkt met een conditie dan de regel tot 1 folder:

RewriteCond %{REQUEST_URI} ^/deze_map/ [NC]
RewriteRule ^(.*)$ /index_voor_map.php?$1 [L]

en ter aanvulling zijn er nog de volgende 2 regels:

RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{REQUEST_URI} !^/nog_een_map/

Deze regels zeggen dat de request methode GET moet zijn (hier kunt u natuurlijk ook POST gebruiken) en dat de folder /nog_een_map/ genegeerd kan worden. Let hierbij op de uitroepteken die dus 'niet' betekent.

Meerdere condities
Wanneer u meerdere condities wilt gebruiken kunt u ze kopellen met de OR:

RewriteCond %{REQUEST_URI} ^/map1/$ [NC,OR]
RewriteCond %{REQUEST_URI} ^/map2/$ [NC]

Tot slot

Hierboven hebben wij u enkele basis redirect en rewrite regels uitgelegd welke u kunt uitbreiden en combineren waar dit mogelijk is. Hopende hebben wij u hiermee op weg geholpen.