mod_rewrite op VPS niet aan de praat te krijgen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Erwin H

Erwin H

12/07/2013 09:41:34
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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?
Gewijzigd op 12/07/2013 09:41:59 door Erwin H
 
PHP hulp

PHP hulp

24/12/2024 01:57:41
 
Johan M

Johan M

12/07/2013 10:05:29
Quote Anchor link
Ik doe hem zo:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
RewriteEngine On

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

Erwin H

12/07/2013 10:22:12
Quote Anchor link
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?
 
Bart V B

Bart V B

12/07/2013 10:45:15
Quote Anchor link
En als je hem zo opgeeft?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
RewriteEngine On

RewriteBase /

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


Andere optie:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
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?
 
Erwin H

Erwin H

12/07/2013 10:50:05
Quote Anchor link
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.
 
Johan M

Johan M

12/07/2013 10:56:16
Quote Anchor link
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.
 
Bart V B

Bart V B

12/07/2013 10:58:49
Quote Anchor link
En is dit exact de code die je erbij zet?
Of heb je ook nog iets van: <IfModule mod_rewrite.c> </IfModule>
 
Erwin H

Erwin H

12/07/2013 10:59:31
Quote Anchor link
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.

Toevoeging op 12/07/2013 11:00:26:

@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?
 
Johan M

Johan M

12/07/2013 11:05:38
Quote Anchor link
Ik neem aan dat het tussen de Directory-tag moet komen in je httpd.conf om het toe te passen op de betreffende map:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<Directory /home/{username}/domains/{url}/public_html>

</Directory>


// Edit: DirectAdmin kan ook werken met |DOCROOT|
Gewijzigd op 12/07/2013 11:07:09 door Johan M
 
Erwin H

Erwin H

12/07/2013 11:06:20
Quote Anchor link
Toevoeging op de test met htaccess, dan werkt het in elk geval wel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
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)
 
Bart V B

Bart V B

12/07/2013 11:14:22
Quote Anchor link
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..
Gewijzigd op 12/07/2013 11:15:38 door Bart V B
 
Johan M

Johan M

12/07/2013 11:18:36
Quote Anchor link
Erwin, ik heb op mijn VPS met DirectAdmin op een van mijn sites de .htaccess leeggegooid (leverde een mooie error op in de browser uiteraard), en vervolgens de "Httpd.conf Customization" uitgevoerd voor de betreffende account. De volgende code heb ik gebruikt en dit werkt voor mij:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<Directory |DOCROOT|>
RewriteEngine On

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


Zonder de Directory-tag kreeg ik een 400-error.

// Edit: Ingelogd op DirectAdmin, admin-level, onderaan "Custom HTTPD Configurations" > domein
Gewijzigd op 12/07/2013 11:27:56 door Johan M
 
Erwin H

Erwin H

12/07/2013 11:21:38
Quote Anchor link
Johan M op 12/07/2013 11:05:38:
Ik neem aan dat het tussen de Directory-tag moet komen in je httpd.conf om het toe te passen op de betreffende map:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<Directory /home/{username}/domains/{url}/public_html>

</Directory>


// Edit: DirectAdmin kan ook werken met |DOCROOT|

Dit heb ik nu binnen de httpd.conf gezet (buiten DirectAdmin om dus) en dan werkt het. Bedankt daarvoor in elk geval!
Nu alleen nog om het te doen via DirectAdmin, zou ik dan zo'n directory block moeten plaatsen binnen de virtualhost sectie (via de 'httpd customization for domain.nl' optie)? -> beantwoord in je laatste post, ga ik even testen

@Bart
Zonder die conditie lukte het uiteindelijk dus wel, had alleen dat directory block nodig.



Toevoeging op 12/07/2013 11:29:43:

En in DirectAdmin werkt het dus ook inderdaad. Met de code zoals door Johan gegeven krijg ik het nu inderdaad ook aan de praat.

Heel erg bedankt!
Gewijzigd op 12/07/2013 11:22:46 door Erwin H
 
Johan M

Johan M

12/07/2013 11:32:09
Quote Anchor link
Graag gedaan, en mijn (gloednieuwe) VPS/DirectAdmin staat gelijk ook weer een beetje netter ingesteld :P
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.