2010-06-08 9 views
1

Oui, mod_rewrite me rend fou.Comportement htaccess inattendu (mod_rewrite et apache)

Voici le problème:

mon htaccess

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

lorsque je tente d'accéder à la page advantix (si l'adresse était www.mywebsite.com/advantix), je suis redirigés vers advantix/?url=advantix

Regarder le journal d'accès, j'ai un suspect 301 au milieu

"GET /advantix HTTP/1.1" 301 335 "-" "Mozilla/5.0" 
"GET /advantix/?url=advantix HTTP/1.1" 200 186 "-" "Mozilla/5.0" 

Il existe un détail important: advantix est un répertoire. Donc, si je commente cette règle, advantix va dans le dossier et liste les fichiers.

Pourquoi s'applique-t-il automatiquement le / s'il y a un dossier correspondant?

Je ne veux pas atteindre le dossier, je veux atteindreindex.php?url=advantixavec un appel àadvantix.

J'ai le rewriteLogs aussi, mais ils n'ont pas aidé plus. Mon conf de vhost a Directory tag avec Options All, si aide, je ne sais pas beaucoup à ce sujet.

Répondre

1

Désactiver la directive Apache DirectorySlash. Cela semble provoquer la redirection 301.

DirectorySlash Off 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA] 
+0

merci, ça marche. Je n'ai pas trouvé cette directive! – apelliciari

+0

pas de problème. Bien que j'étais au courant de cette fonctionnalité, mais n'était pas au courant de la directive exacte jusqu'à maintenant. –

0

Essayez cette fois:

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

cela me conduit évidemment à la liste des dossiers, et je ne veux pas cela. – apelliciari

0

J'ai eu un problème similaire. Ma solution est d'arrêter de réécrire l'URL sur les «mauvais» chemins (répertoires sans barre oblique à la fin):

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