Подтвердить что ты не робот

Mod_rewrite: удалить завершающий слэш (только один!)

Я использую mod_rewrite/.htaccess для довольно URL-адресов.

Я использую это условие/правило для исключения конечных косых черт (вернее: переписываю 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 на URL без привязки к косой чертой.

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

Итак, возможно ли исключить только следы слэшей, если на самом деле это всего лишь одна конечная косая черта?

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

Спасибо.

4b9b3361

Ответ 1

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

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

Примечание: принятый в настоящее время ответ работает только для http не https, но этот работает для обоих.

Ответ 2

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

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

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

Ответ 3

^(.+[^/])/$

т.е. передний символ не должен быть косой чертой.

Ответ 4

Вот решение на основе mod-alias для удаления конечной косой черты из URL-адресов:

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

Вы можете использовать вышеуказанную переадресацию в файле htaccess или server.config.

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

Ответ 5

Если вы хотите удалить только косые черты из запросов GET, используйте следующее:

RewriteCond %{REQUEST_METHOD} =GET
RewriteRule ^(.*)/$ /$1 [L,R=301]