2010-06-18 3 views
22

Я использую mod_rewrite/.htaccess для довольно URL-адресов.mod_rewrite: удалить трейлинг-косую черту (только один!)

Я использую это условие/правило для устранения конечных косых черт (а точнее: переписываю URL-адрес без привязки к косую черту с помощью перенаправления 301. Я делаю это, чтобы избежать дублирования контента и потому, что мне нравятся URL-адреса при отсутствии косых черт лучше):

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{HTTP_HOST} !^\.localhost$ [NC] 
RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [R=301,L]

Хорошо работает до сих пор. Только недостаток:
он также переадресовывает «множественный трейлинг-косая черта» -URLs до непереходные-косая ссылки.

Пример:
http://example.tld/foo/bar////// вперед к http://example.tld/foo/bar
в то время как я только хочу http://example.tld/foo/bar/ направить http://example.tld/foo/bar.

Итак, можно ли исключить только следы слэшей, если на самом деле это только один trailing slash?

Извините, если это несколько досадный или странный вопрос!

Спасибо.

+0

Тот же вопрос: http://stackoverflow.com/questions/19990838/remove-trailing-slash-from-sub-directory-folder-apache-1-3-42-directoryslash-off –

ответ

3
^(.+[^/])/$ 

I.e. неподдельный характер не должен быть косой чертой.

14

изменить правила перезаписи:

RewriteRule ^(.+[^/])/$ http://%{HTTP_HOST}/$1 [R=301,L] 

на английском языке: соответствовать начало строки, один или более ничего, НЕ слэш, слэш, конец.

+1

Это не сработало для меня , – user367217

+1

Кажется, что 'http: //% {HTTP_HOST}/$ 1' должен быть' http: //% {HTTP_HOST} $ 1', иначе добавляется/добавляется начало нового URL-адреса. –

17

следующее правило будет соответствовать любому URL, заканчивающийся косой чертой и удалить все косые черты с конца этого:

RewriteRule ^(.*)/+$ $1 [R=301,L] 

Примечание: Принятая в настоящее время ответ работает только для HTTP не HTTPS, но это работает для обоих.

+13

Я задерживаю дыхание уже 2 месяца ... – Ben

+0

@steve Завершенный ответ, очевидно, будет стоить того ожидания. – nickhar

+0

Я обновил эту страницу более 2 лет, ожидая ответа ... Это буквально последнее, что мне нужно сделать, прежде чем разместить мой сайт в прямом эфире ... –

1

Вот мод-псевдоним на основе раствора для удаления слэш из URLs:

RedirectMatch ^/(.*?)/$ /$1 

Вы можете использовать выше Перенаправление в вашем Htaccess или файл server.config.

Это перенаправит /uri/ на */uri **.

+1

Это сработало для меня, ответ aleemb не работал, поскольку я использую виртуальные хосты. –

Смежные вопросы