Я пытался удалить косые черты в конце со всех URL-адресов. Например, я хочу, чтобы следующие URL-адреса перенаправлялись:
http://my-site-url.com///test
-> http://my-site-url.com/test
http://my-site-url.com//test
-> http://my-site-url.com/test
http://my-site-url.com/test
-> http://my-site-url.com/test
Я пробовал использовать следующее правило RedirectMatch:
RedirectMatch 301 ^//+(.*)$ http://my-site-url.com/$1
Однако это вообще ничего не дает. Страница не выполняет перенаправление, и URL-адрес с несколькими косыми чертами отображается в журнале сервера.
Я также пробовал использовать следующее правило RewriteRule:
RewriteRule ^//+(.*)$ http://my-site-url.com/$1 [R=301,L]
Но это тоже ничего не дает.
Странно то, что правило:
RedirectMatch 301 ^//*(.*)$ http://my-site-url.com/$1
работает так, как ожидалось, то есть перенаправляет все URL-адреса, даже правильные. Но как только я меняю выражение на ^//+(.*)$
он перестает соответствовать чему-либо.
Выход httpd -v
является:
Server version: Apache/2.4.37 (centos)
Server built: Oct 7 2019 21:42:02
И я работаю на CentOS 8.
Любая помощь с этим будет принята с благодарностью!
Самый простой способ уменьшить количество косых черт везде в URL-пути является использование того факта, что URL-путь, RewriteRule
шаблон совпадения с уже имели несколько косых черт, сокращенных до одиночных косой чертой самим Apache (перед сопоставлением с файловой системой).
Попробуйте сделать следующее, прежде чем какие-либо существующие перезаписи / перенаправления:
RewriteEngine On
RewriteCond %{THE_REQUEST} //+
RewriteRule (.*) $1 [R,L]
Условие проверяется на соответствие THE_REQUEST
серверная переменная (которая содержит сырой первая строка HTTP-запроса и никоим образом не изменяется), чтобы определить, есть ли в URL-пути 2 или более слэша.
Захваченная обратная ссылка ($1
) уже уменьшено несколько косых черт (как упомянуто выше)