@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 идет - почему?
  • Вопрос задан
  • 436 просмотров
Решения вопроса 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)
Редиректит вроде только раз при любом раскладе.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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