weranda
@weranda

Почему правило редиректа для .htaccess срабатывает только для главной страницы?

Привет.

Вроде, все корректно, но почему-то срабатывает только для главной страницы. Остальные страницы как открывались нормально, так и открываются и редиректа с них нет. Проверил правило в каком-то сервисе тестирования https://htaccess.madewithlove.com?share=cfe85586-a... Там то же самое — для главной страницы правило работает, для остальных — нет. Подскажите, в чем ошибка.

RewriteEngine on
RewriteCond %{REMOTE_ADDR} 11.11.11.11
RewriteRule ^$ /3.html [L,R=301]


Если протестировать для страницы site.ru, то работает. А если для любой другой страницы сайта (не главной), к примеру, site.ru/1.html, тогда не работает.
  • Вопрос задан
  • 84 просмотра
Пригласить эксперта
Ответы на вопрос 2
IvanU7n
@IvanU7n
nothing interesting here
ну так условие для пустой строки пути, т.е. для ничего кроме / из-за магии RewriteBase срабатывать не будет
в общем удаление $ из RewriteRule должно помочь
Ответ написан
Комментировать
@dodo512
Шаблон ^$ совпадает только для главной страницы.
Можно убрать ^ или $. Тогда шаблон будет совпадать для любой страницы, в том числе и для /3.html.
Так что в итоге будет бесконечный редирект /3.html -> /3.html.
В правило нужно добавить исключение для /3.html.
Это можно сделать разными способами.

RewriteCond %{THE_REQUEST} "!^\S+ /3\.html"
RewriteRule ^ /3.html [L,R=301]


RewriteCond %{REQUEST_URI} !^/3\.html$
RewriteRule ^ /3.html [L,R=301]


RewriteCond %{REQUEST_URI} !=/3.html
RewriteRule ^ /3.html [L,R=301]


RewriteRule !^3\.html$ /3.html [L,R=301]

https://habr.com/ru/companies/sprinthost/articles/...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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