web-dev-qa-db-fra.com

Supprimer la barre oblique de l'URL du répertoire

Je dois en quelque sorte supprimer la dernière barre oblique dans les URL de mon répertoire. Par exemple, au lieu de example.com/projects/, j'aimerais voir example.com/projects. J'ai essayé beaucoup de solutions sans succès jusqu'à présent. Voici mon fichier .htaccess actuellement:

Options +FollowSymLinks
DirectoryIndex index.html

RewriteEngine on

RewriteCond %{HTTP_Host} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

RewriteCond %{THE_REQUEST} /index\.html [NC]
RewriteRule ^(.*?)index\.html$ /$1 [L,R=301,NC,NE]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1/index\.html -f [NC]
RewriteRule ^(.+?)/?$ /$1/index.html [L]

ErrorDocument 404 http://www.example.com/error404.html
1
Oli

Vous êtes probablement déjà en train de créer un lien vers les URL du répertoire sans la barre oblique finale? C'est la première étape.

S'agissant de répertoires physiques, vous devez indiquer à mod_dir de ne pas "réparer" ces URL en ajoutant une barre oblique finale. Vous pouvez le faire avec la directive DirectorySlash en haut de votre fichier:

DirectorySlash Off

Cela signifie que vous devez maintenant ajouter manuellement la barre oblique finale avec une réécriture interne. Notez que mod_dir normalement 301 redirige vers l'URL barrée, donc cela aura été mis en cache par le navigateur. Assurez-vous que le cache de votre navigateur est vide avant les tests.

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1/index\.html -f [NC]
RewriteRule ^(.+?)/?$ /$1/index.html [L]

Le principal problème avec ceci est que la première directive RewriteCond empêche la réécriture des répertoires, ce qui semble être le contraire de ce que vous essayez de réaliser. Essayez plutôt ce qui suit:

RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{DOCUMENT_ROOT}/$1/index.html -f
RewriteRule ^(.+?)/?$ /$1/index.html [L]
ErrorDocument 404 http://www.example.com/error404.html

De côté: Vous devez spécifier une URL relative à la racine de votre document d'erreur, telle que:

ErrorDocument 404 /error404.html

Si vous utilisez une URL absolue, Apache déclenchera un redirection externe à votre document d'erreur (au lieu d'une sous-demande interne) qui est généralement indésirable.

0
MrWhite