@IwanIwanow

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

Произвожу аудит сайта с помощью ahrefs.com и вижу:
605481b0438ea522601523.jpeg
На сколько понимаю, с httр://www. главной страницы сперва идет временный 302 редирект на httрs://www. главную, а с нее на httрs:// главную (без www), хотя сразу с httр://www. на httрs:// (без www) должно идти.

Содержимое .htaccess:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
# BEGIN Ahrefs
Redirect 301 http://mysite.ru/ https://mysite.ru/
Redirect 301 http://www.mysite.ru/ https://mysite.ru/
Redirect 301 https://www.mysite.ru/ https://mysite.ru/
# END Ahrefs
#RewriteEngine On  # Если этой строки нет выше
RewriteCond %{HTTP:X-Forwarded-Protocol} !=https
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]


Объясните пожалуйста правила редиректа из моего .htaccess.
1) Отдельно выставил Redirect 301 для всех случаев с главной страницей, что бы сразу на https://mysite.ru/ без цепочки происходил редирект, но на сколько понял, этот 301 ниже по приоритету чем другие правила, поэтому он от цепочки не избавляет.
2) На сколько понял, RewriteCond %{HTTP:X-Forwarded-Protocol} !=https это правило для случаев, когда протокол не https. Оно будет срабатывать для случаев, которые перечислены ниже него, но до очередного RewriteCond?
3) RewriteCond из блока WordPress не конфликтует с последним RewriteCond?
4) Поможет ли перестановка моих трех Redirect 301 в самый верх для увеличения их приоритета и избавит от цепочки?
5) Кроме цепочки, с httр://mysite.ru редирект на httрs://mysite.ru тоже с кодом 302 идет - почему?
  • Вопрос задан
  • 140 просмотров
Решения вопроса 1
@Vintets
Я конечно тот ещё специалист, но почему ты ставишь эти редиректы после блока WordPress? Ведь должны быть до.
Отдельные редиректы для главной страницы лишние, они должны обрабатываться на общих правилах.
У себя сделал так:
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

первая часть: если адрес с www (оба варианта и http и https) редирект на https без www
вторая: если не https, редирект на https (без www)
Редиректит вроде только раз при любом раскладе.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы