Убрать повторяющиеся слеши одним редиректом htaccess

Рейтинг: 0Ответов: 1Опубликовано: 13.04.2023

пытаюсь сделать редирект например с ура site.ru/// на site.ru Вставил в htaccess следующий код:

RewriteCond %{REQUEST_URI} ^(.*?)\/{2,}(.*?)$
RewriteRule . %1/%2 [L,R=301]
RewriteCond %{THE_REQUEST} //
RewriteRule .* /$0 [R=301,L]

И все бы хорошо, но вот только он делает сначала редирект с site.ru/// на site.ru//, затем с site.ru// на site.ru/ и уже потом site.ru/ на site.ru

Как сделать это одним редиректом?

Ответы

▲ 0

Проблема заключается в том, что редирект выполняется постепенно, удаляя один слэш за раз. Чтобы выполнить редирект сразу, замените ваш код в .htaccess на следующий:

RewriteEngine On
RewriteCond %{THE_REQUEST} \s[^?]*//
RewriteRule ^(.+?)/{2,}(.*)$ $1/$2 [R=301,L]

вот что делает этот код:

  1. RewriteEngine On включает модуль mod_rewrite.

  2. RewriteCond %{THE_REQUEST} \s[^?]*// проверяет, есть ли двойной слэш или более в запрошенном URL.

  3. RewriteRule ^(.+?)/{2,}(.*)$ $1/$2 [R=301,L] ищет двойной слэш или более в запрашиваемом пути и заменяет их одним слэшем, выполняя редирект с кодом 301 (Moved Permanently).