Как настроить 301 редирект с главной с // и более на главную без слешей?

Нужно настроить 301 редирект, который при вводе более двух слешей на главной будет переадресовывать на главную без слешей.
То есть с:
site.com///
на
site.com

Сейчас остается по прежнему site.com///

Нашел решение для внутренних страниц
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]

Но для главной этот код не работает.
Пробовал ставить его выше остальных правил - не помогло.
  • Вопрос задан
  • 3143 просмотра
Пригласить эксперта
Ответы на вопрос 2
Собственно, вынесу ответ из комментария:

Вот единственный рабочий конфиг, который убирает множественные leading-слеши:
RewriteEngine on
RewriteBase /
RewriteCond %{THE_REQUEST} ^(?:GET|POST)\ //+([^\ ]*) 
RewriteRule .* https://%{HTTP_HOST}/%1 [R=301,L]

Я проверял на своей тестовой площадке, вот пара примеров:
https://squadpaint.com///////
https://squadpaint.com///////sometextafter
Варианты с %{REQUEST_URI} не работают, т.к. Apache множественные слеши склеивает в 1 ещё до передачи адреса на обработку в .htaccess
Я потратил довольно много времени на различные попытки с %{THE_REQUEST}, в итоге могу сказать: не пытайтесь добавлять end-string-assertion в regexp, т.к. перестанет матчится паттерн, у строки %{THE_REQUEST} нет конца =)
В регекспе выше нужно также учесть возможность, что запрос может прити с доменом в адресе, оставляю это вам.
Ответ написан
@Kosstya Автор вопроса
Не хочет. Так пробовал
RewriteCond %{REQUEST_URI} ^\/+$
RewriteRule . %1/%2 [R=301,L]
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы