2010-01-07 3 views
0

Dans un contexte .htaccess, j'ai une règle simple de ré-écriture:changement de comportement étrange dans mod_rewrite

RewriteEngine on 
RewriteRule ^dir/([^/]+)/(.*) action/do.php?a=$1&b=$2 [L,QSA] 

dir et action sont dans le même répertoire, qui est aussi mon DocumentRoot.

Lors de l'accès http://example.org/dir/a/b la demande doit (et a été) réécrite à http://example.org/action/do.php?a=a&b=b sans redirection ou quoi que ce soit de visible.

Cependant, depuis que je suis passé d'Apache 1.3 + mod_php à Apache 2.2 (mpm_worker) + PHP FastCGI (ne sais pas comment il est lié, mais il semble être), la règle de précédent renvoie une erreur 404:

L'URL demandée /var/www/action/do.php n'a pas été trouvée sur ce serveur.

Le DocumentRoot est maintenant inséré dans la demande! Le fichier /var/www/var/www/action/do.php n'existe évidemment pas.

Pour contourner ce problème, j'ai changé la règle: (ajouté un / au début de la deuxième partie)

RewriteEngine on 
RewriteRule ^dir/([^/]+)/(.*) /action/do.php?a=$1&b=$2 [L,QSA] 

Et ça marche (parce que, heureusement, dans ce cas, je suis dans le répertoire DocumentRoot) .

Savez-vous ce qui a causé ce changement de comportement? Avez-vous remarqué la même chose?

Répondre

0

Ok, j'ai trouvé ce qui s'est passé.

En fait, je n'étais pas dans mon DocumentRoot mais dans un VirtualDocumentRoot grâce à mod_vhost_alias.

Le problème ne se produit pas lors de l'utilisation de «vrais» hôtes virtuels.