De basis van .htaccess

Posted at December 01, 2011

Als je met websites werkt ben je het .htaccess bestand misschien al wel eens tegengekomen, maar wat doet dit bestand nou eigenlijk? .htaccess is iets wat alleen werkt op Apache webservers (overgrote deel van alle webservers op het internet).

Als je naar een restaurant gaat kom je voor het eten, terwijl je wacht komt de ober aangerend om alles te serveren, jij bent er niet voor de ober maar voor het eten wat hij serveert.

In dit voorbeeld ben jij de websitebezoeker, het eten de pagina(s / website) die je bezoekt en de webserver is de ober die zorgt dat iedereen netjes zijn eten krijgt. Een ‘stressed’ webserver is dan ook een ober die teveel werk heeft in te weinig tijd, het gevolg is dat iedereen lang op zijn eten moet wachten en misschien zelfs weg gaat.

.htaccess is een bestand die je in mappen op je webserver kan zetten. Dit bestand bevat regels over hoe de inhoud van die map getoond moet worden aan de browser. Regels over hoe de ober jouw eten moet serveren.

Voorbeelden van dingen die je kan doen met .htaccess:

clean URLS

Grote CMS’en zoals WordPress of Frameworks zoals CodeIgniter of CakePHP werken op basis van virtuele directories: Als jij een pagina aanmaakt met de naam ‘contact’ kan iedereen die pagina bereiken onder jouwwebsite.nl/contact. Die /contact slaat normaal gesproken op de map contact op je webserver. Echter is dit niet handig voor dynamische systemen die on the fly pagina’s kunnen aanmaken. Anders zou elke post op je blog een unieke pagina moeten zijn.

Deze systemen halen een trucje uit om dit voor elkaar te krijgen. Ipv naar /contact te gaan ga je eigenlijk naar bijvoorbeeld: index.php?page=contact (en vanaf hier kan index.php kijken welke pagina er opgevraagd wordt).

Je bent het al snel met me eens dat /contact er mooier en cleaner uitziet en makkelijk te typen is in een browser. Met .htaccess kan je al het verkeer wat naar /contact gaat achter de schermen sturen naar index.php?page=contact. Hoe doe je dit?

Maak een bestand .htacces en zet deze in de betreffende map en zet deze code erin:

# rewrite all requests ( /a/b/c/d/ ) to index.php?page=a/b/c/d/
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]

Eerst zetten we de rewrite engine aan (het onderdeel van Apache wat dit mogelijk maakt) en vervolgens zeggen we dat alle bestand (!-f) en folder (!-d) requests die binnenkomen moeten worden herschreven naar index.php?page=[request].

ETags

In het kader van optimalisatie willen we zoveel mogelijk rommel wat niet gebruikt wordt verwijderen. Een goed voorbeeld hiervan zijn de ETags, deze uitvinding van Microsoft was bedoeld bij te houden wanneer bestanden gewijzigd zijn ivm. caching. Dit wordt echter nooit gebruikt maar wordt wel standaard meegestuurd vanaf Apache. Uitzetten is heel simpel:

FileETag None

Default charset

Een charset heeft te maken met de encoding van je te webpagina’s (en alle andere bestanden die je serveert), normaal moet je die ook in je HTML vastleggen, echter kan je dit wel eens vergeten. In dat geval is de default charset handig.

AddDefaultCharset utf-8

Dit zijn wat voorbeelden van een tal van mogelijkheden. Wil je meer weten? De .htaccess van HTML5Boilerplate bevat 541 regels aan Apache optimalisatie!

Posted at December 01, 2011, under general.