Назад | Перейти на главную страницу

Удаление ведущей косой черты в URL-адресах - Apache

Я пытался удалить косые черты в конце со всех 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) уже уменьшено несколько косых черт (как упомянуто выше)