mod rewrite: supprimer la barre oblique (une seule!)
j'utilise mod_rewrite/.htaccess pour de jolies URLs.
j'utilise cette condition / règle pour éliminer les slashes à la suite (ou plutôt: réécrire à L'URL non-slash à la suite, par une redirection 301; je fais cela pour éviter le contenu dupliqué et parce que j'aime les URL sans slash à la suite mieux):
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{HTTP_HOST} !^.localhost$ [NC] RewriteRule ^(.+)/$ http://%{HTTP_HOST}/ [R=301,L]
fonctionne bien jusqu'à présent. Seul inconvénient:
il transmet également "plusieurs-fuite-slash"-Url pour non-fuite-slash-Url.
Exemple:http://example.tld/foo/bar//////
redirige vers http://example.tld/foo/bar
alors que je veux seulement http://example.tld/foo/bar/
avant http://example.tld/foo/bar
.
ainsi, est - il possible d'éliminer seulement les slashs de queue si c'est en fait slash arrière?
Désolé si c'est un peu ennuyeux ou question étrange!
Merci.
4 réponses
La règle suivante va correspondre à N'importe quelle URL se terminant dans une barre oblique et enlever toutes les barres obliques de la fin de celui-ci:
RewriteRule ^(.*)/+$ [R=301,L]
Remarque: la réponse actuellement acceptée ne fonctionne que pour http et non pour https, mais celle-ci fonctionne pour les deux.
changement de la règle de réécriture:
RewriteRule ^(.+[^/])/$ http://%{HTTP_HOST}/ [R=301,L]
en anglais: match au début de la chaîne, un ou plusieurs rien, PAS une barre, une barre oblique à la fin.
^(.+[^/])/$
C'est-à-dire. le caractère forelast ne doit pas être un slash.
Voici une solution basée sur un MOD-alias pour supprimer la barre oblique des urls:
RedirectMatch ^/(.*?)/$ /
Vous pouvez utiliser la redirection ci-dessus dans votre serveur ou htaccess.fichier de configuration.
redirection /uri/ */uri** .