login  Naam:   Wachtwoord: 
Registreer je!
 Forum

.htaccess RewriteRule zonder variabele

Offline koosax - 03/03/2014 16:13
Avatar van koosaxLid Ik gebruik om dit moment de volgende regel in mijn htaccess-bestand:

RewriteRule ^(.*)$ test.php?var=$1 [L,QSA]

Dus www.domein.com/hoi gaat naar test.php?var=hoi
Maar nu gaat die ook naar test.php als je gewoon www.domein.com wilt openen. Hoe kan ik er voor zorgen dat wanneer er geen variabele is hij gewoon de index (of een andere pagina) opent?

Alvast bedankt!

1 antwoord

Gesponsorde links
Offline Thomas - 03/03/2014 17:38 (laatste wijziging 03/03/2014 17:52)
Avatar van Thomas Moderator Dit hangt een beetje van je instellingen af, maar normaal gesproken is het default bestand dat wordt geladen in elke directory "index.php", dit is de DirectoryIndex instelling. Dit is ook iets om te onthouden voor als je RewriteRules niet voldoen.

Het werkt niet zoals je verwacht omdat je RewriteRule een "catch all" is, het patroon ^(.*)$ vangt alles. Wat je moet doen is hier nog een aantal condities aan opleggen zodat "alles", maar onder bepaalde omstandigheden, wordt herschreven. Je moet de RewriteRule vertellen dat de URL niet herschreven mag worden als je met een bestaand bestand of een bestaande directory van doen hebt, deze hebben dan "voorrang" op de RewriteRule. Dit doe je als volgt:

  1. RewriteCond %{REQUEST_FILENAME} !-d
  2. RewriteCond %{REQUEST_FILENAME} !-f
  3. RewriteRule ^(.*)$ test.php?var=$1 [L,QSA]


En als ik je een tip mag geven, als je dan toch van deze constructie gebruik maakt zou ik kiezen om gewoon alles om te schrijven naar test.php (of index.php of wat dan ook), en dit niet in aan de querystring-variabele "var" toe te kennen. Je reserveert hiermee namelijk de variabele "var" wat voor onvoorspelbaar gedrag kan zorgen. Stel nu dat iemand zelf &var=... aan een URL plakt?

Ik zou dus zoiets doen:
  1. RewriteCond %{REQUEST_FILENAME} !-d
  2. RewriteCond %{REQUEST_FILENAME} !-f
  3. RewriteRule . test.php [L]


Dat lijkt mij de "schoonste" manier. Je querystring-variabelen blijven gewoon op de gebruikelijke manier toegankelijk (via $_GET in PHP) als je je daar zorgen over maakt.

Daarnaast zit alles nog in je REQUEST_URI. PHP heeft handige functies voor het snel ontleden van een URL (parse_url en parse_str):

  1. <?php
  2. function dump($a) {
  3. echo '<pre>'.print_r($a, true).'</pre>';
  4. }
  5.  
  6. $test = @parse_url($_SERVER['REQUEST_URI']);
  7. $querystring = array();
  8. if (isset($test['query'])) {
  9. parse_str($test['query'], $querystring);
  10. }
  11. dump($test);
  12. dump($querystring);
  13. ?>
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.335s