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.

23
demandé sur user367217 2010-06-18 12:20:06

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.

18
répondu aleemb 2015-06-06 19:22:19

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.

14
répondu Jon 2010-06-18 08:25:54
^(.+[^/])/$

C'est-à-dire. le caractère forelast ne doit pas être un slash.

3
répondu Sjoerd 2010-06-18 08:24:09

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

1
répondu starkeen 2017-02-10 18:16:11