mod_rewrite: удалить косую черту (только один!) - PullRequest
24 голосов
/ 18 июня 2010

Я использую mod_rewrite / .htaccess для красивых URL.

Я использую это условие / правило, чтобы исключить завершающие косые черты (или, скорее: переписать на non-trailing-slash-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.

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

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

Спасибо.

Ответы [ 4 ]

20 голосов
/ 30 марта 2013

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

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

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

14 голосов
/ 18 июня 2010

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

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

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

4 голосов
/ 18 июня 2010
^(.+[^/])/$

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

1 голос
/ 10 февраля 2017

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

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

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

Это будетперенаправить / uri / в * / uri **.

...