Mooie URL met .htaccess en php

Een veel vookomend probleem. Je wilt je website niet met $_GET variabelen laten zien in de url. Dus geen http://www.flamelab.com/index.php?pagina=nieuws&id=12 maar het liefst http://www.flamelab.com/nieuws/12/. Dit is vriendelijk voor de zoekmachines en het ziet er ook gewoon netter uit. Er zijn meerdere manier om dit te doen maar ik vind de volgende toch wel de makkelijkste.

We moeten wel uitgaan van een Apache webserver waar we .htaccess bestanden kunnen gebruiken. We kunnen in de .htaccess mod_rewrite gebruiken. Dit is een apache module om schijfwijze van een URL te veranderen. Zelf spreken ze van The swiss army knife of URL manipulation.

Hoe moet de .htaccess er in mijn voorbeeld uit zien.

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .+ index.php


Het enige wat dit bestandje op de webserver doet is alle slashes en normale dir namen verwijzen naar het bestand index.php zonder een error 404 te geven. Het bestand plaatsen we in de root van de html dir op de webserver. (waar de index.php ook staat)

Het volgende wat we moeten doen is in het php bestand deze URL zo lezen dat we alles tussen de slashes kunnen gebruiken als normale variabelen.

Ik gebruik daar de volgende functie voor.

function readurl(){
    $pad = $_SERVER["REQUEST_URI"];
    $pad = explode("/", $pad);
    array_shift($pad); // Het eerste deel uit de array gooien.
   
    // elk deel als een get variabele opslaan.
    foreach($pad as $deel)  {
        if($deel != ""){
            $_GET[] = $deel;
        } // end if
    } // end foreach
} // einde functie

Deze functie laat je bij elke refresh van je pagina de url omzetten in variabelen. Als je URL http://www.flamelab.com/nieuws/12 zou zijn dan zou je get variabele er als volgt uitzien.

array(
       [0] => "nieuws"
       [1] => "12"
)


Nu heb je je $_GET variabelen zoals je ze eerst ook zou hebben als je de url http://www.flamelab.com/index.php?pagina=nieuws&id=12 zou gebruiken. alleen heten ze dan geen pagina en id maar gewoon $_GET[0] en $_GET[1].

Wil je meer weten over Mod_rewrite? Download dan de Cheat Sheet van IloveJackDaniels.com

Wat wel aan te raden is om in je html een base tag tussen de head tags te zetten. Je browser zal dan altijd zoeken naar images en css styles vanaf dat punt.<base href="http://www.flamelab.com/" />
2008-02-24     comments 0