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
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.