web-dev-qa-db-fra.com

RewriteRules ciblant un répertoire entraîne une redirection gratuite

J'ai un RewriteRule de type CMS standard installé dans mon .htaccess:

RewriteRule ^(.+)$ index.php?slug=$1

Disons que j'ai un répertoire appelé foo dans le répertoire racine. Pour une raison quelconque, si vous cliquez sur la page, une redirection est générée:

http://example.com/foo redirige vers http://example.com/foo?slug=foo

La suppression du répertoire résout le problème, mais malheureusement, ce n'est pas une option. Quelqu'un connaît-il une solution de rechange?

2
MapDot

Essayer,

DirectorySlash off

Ce n'est pas la réécriture générant la redirection mais mod_dir.

2
covener

Avant le RewriteRule mis:

RewriteCond %{REQUEST_FILENAME} !-d

Cela vérifiera si le répertoire foo existe, sinon il ne créera pas de règle de réécriture.

Aussi, je ne suis pas sûr de savoir comment vous êtes arrivé à foo?slug=foo à partir de la destination de redirection index.php?slug=$1?


Ok, j'ai vérifié, vous aurez besoin d'un jeu de règles supplémentaire avant celui-ci pour corriger les manquants /

RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ $1/ [L]

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+)$ index.php?slug=%{REQUEST_URI} [QSA,L]

Cela devrait fonctionner comme un charme.

1
Hrvoje Špoljar