Via de httpd.conf probeer ik een mod_rewrite in te stellen op mijn VPS. Eigenlijk zou deze heel simpel moeten zijn: alle requests moeten naar de index.php gestuurd worden, met de complete route als parameter. Tenzij het een bestaande directory of file is:

RewriteEngine On

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

De mod_rewrite is geinstalleerd en doet het, alleen komt geen enkel request nu aan. Ik heb het ook getest door de rewriterule het volledige domein te geven, dus:

RewriteRule ^(.*)$ http://www.domein.nl/index.php?route=$1

Dan krijg ik de melding dat de server het request maar blijft doorsturen. De url wordt dan
http://www.domein.nl/index.php?route=/index.php
Met andere woorden, bestaande bestanden worden niet herkent. Nu heb ik ergens het vermoeden dat ik dus een RewriteBase moet opnemen, maar ik heb de hele DocumentRoot al geprobeerd, geen enkele werkt.

Iemand een idee over wat ik klaarblijkelijk ben vergeten te doen?
Ik doe hem zo:

RewriteEngine On

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

Op mijn locahost werkt die ook, maar op mijn VPS ook niet. Het probleem zit hem blijkbaar dus echt in het feit dat mod_rewrite dus blijkbaar niet in de juiste directory kijkt. Hoe kan ik er dus achter komen welke base ik moet opgeven?
En als je hem zo opgeeft?

RewriteEngine On

RewriteBase /

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


Andere optie:

RewriteEngine On

RewriteBase /directory/

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


p.s. Je hebt wel apache opnieuw opgestart nadat je mod_rewrite hebt aangezet he?
Ik start hem elke keer opnieuw op ;-)
Nee, beide werken ook niet. Overigens werk ik dus wel met virtual hosts. In principe zou deze regel wat mij betreft direct voor alle virtual hosts mogen werken.
In eerste instantie heb ik dit via DirectAdmin ingesteld (binnen de eerste virtual host), nu probeer ik het direct in de httpd.conf te krijgen. Voorlopig lukt het in beide gevallen niet.
Bij mij is het de inhoud van mijn .htaccess, daardoor werkt het mijn inziens direct voor de huidige directory. Hierdoor worden deze instellingen wel elke pageload geladen maar je hoeft dan niet je proces opnieuw te starten na een wijziging. Wellicht voor het testen iets gemakkelijker.
En is dit exact de code die je erbij zet?
Of heb je ook nog iets van: <IfModule mod_rewrite.c> </IfModule>
Jammere van htaccess is alleen dat het een performance verlies betekent. Omdat ik binnen mijn VPS complete controle heb over de apache instellingen wil ik dus geen gebruik maken van htaccess (tenzij het echt niet anders zou kunnen).
Het testen punt is wel waar. Ik vraag me alleen af of er verschillen zijn tussen wat er precies in je htaccess zou moeten staan en wat er in een httpd.conf zou moeten staan. Ik zal er nu in elk geval even naar kijken, misschien dat het met een tijdelijke htaccess wel lukt.

[size=xsmall]Toevoeging op 12/07/2013 11:00:26:[/size]

@Bart
Nee, ik heb geen conditie op mod_reqrite module. Die is actief, dat weet ik in elk geval wel. Of is er nog een andere reden waarom je die conditie op zou moeten nemen?
Ik neem aan dat het tussen de Directory-tag moet komen in je httpd.conf om het toe te passen op de betreffende map:

<Directory /home/{username}/domains/{url}/public_html>

</Directory>


// Edit: DirectAdmin kan ook werken met |DOCROOT|
Toevoeging op de test met htaccess, dan werkt het in elk geval wel:

RewriteEngine On

RewriteBase /

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

(index.php even vervangen door een test script waarin ik de $_GET parameters kan laten zien, dan zie ik wat ik wil zien)
Volgens mij was het zo dat de conditie blok betekende ALS de module enabled is.
Of je krijgt een server error, of hij word genegeerd.
Wat ik uit jou foutmelding haal is dat hij in een oneindige lus blijft hangen.
Maar misschien is een good old .htaccess om te testen misschien wel een optie om te testen.oke dat werkt dus wel..

Reageren