Страница 1 из 1

Как правильно сделать переадресацию http на https и www

Добавлено: 19 мар 2024, 15:10
admin
С одной стороны, всё предельно понятно. Так как сайты массово перешли на https, то надо поисковикам явно указать на то, что главное зеркало находится по протоколу https. Но помимо этого всё также актуально, чтобы главным зеркалом был сайт с www (или без www, у кого как). Если этого не сделать, то возможна ситуация, когда роботы Яндекса будут ошибочно принимать за главное зеркало не тот адрес, который бы вам хотелось. И я озаботился этой проблемой всерьёз как раз из-за того, что в Яндекс Вебмастер у меня самопроизвольно поменялось главное зеркало.

Я раньше думал, что надо через htaccess поставить 301 переадресацию на https и www, выбрать в переезде сайта (через Яндекс Вебмастер) нужный вариант адреса и уже после нужной склейки убрать эти директивы. Но как оказалось, переадресация должна быть всегда, иначе спустя время роботы Яндекса могут опять изменить главное зеркало сайта. У меня случилось именно так. Убрал же переадресацию я из-з боязни, что при заходе на сайт не корректно будут отработаны правила для красивых ссылок, которые ссылаются на скрипты. Напрасно.

Другой момент заключается в том, что только переадресаций на https есть несколько вариаций. И это сбивает с толку, так как в одном месте дают один вариант, в другом - другой. А в справке Яндекса и вовсе нет вариантов, а лишь указано, что надо сделать 301 или 302 переадресацию, а дальше всё упирается в хостинг. Яндекс понять можно, ведь хостинги разные и под разными операционными системами, с разным окружением. И чтобы у всех работало корректно, надо обращаться к своим хостинг провайдерам. Но и тут не всё так просто, так как поддержка хостинг провайдеров пользуется тем же справочным материалом и также вынуждена выбирать среди вариантов. И хорошо, если с подобным вопросом уже обращались, а они помогали. У некоторых хостеров есть База знаний, но она скорее для виртуального хостинга. А если у вас VPS или выделенный сервер, то там может быть всё что угодно, ведь вы решаете, как настроить хостинг и какую панель поставить для управления этим хостингом.

Но вернёмся к моей ситуации. Мне хостер предложил такой вариант:

# Редирект с http на https
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


Но на одном VPS у меня это сработало, а на другом (у меня два VPS на совершенно двух разных хостингах) привело к ошибке:

Страница недоступна
Сайт выполнил переадресацию слишком много раз.
Попробуйте удалить файлы cookie.
ERR_TOO_MANY_REDIRECTS


Стал пробовать альтернативы и на одном из сайтов нашёл совет, что если происходит зацикливание, то можно попробовать так:

RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


Поменял и всё заработало без ошибок. Что интересно, на первом хостинге этот вариант тоже заработал. Тогда взял его за основу, но повторюсь, что так и не знаю, лучший ли это вариант, но работает корректно - это факт.

Но дальше мне надо было сделать переадресацию на www, так как хотел, чтобы главным зеркалом был сайт www.мой_домен.ru. Много лет до этого за это отвечала директива host в файле robots.txt, но с недавнего времени Яндекс, а точнее его роботы эту директиву не поддерживают и даже игнорируют. Нужен был новый способ и в итоге решение было также через htaccess:

# Редирект с не-www на www
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule (.*) https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


И тоже заработало, причём на обоих хостингах. Осталось лишь объединить:

# Редирект с http на https
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Редирект с не-www на www
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule (.*) https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


Работает без ошибок на двух VPS. Но допускаю, что можно как-то объединить эти строки или упростить. Другой вопрос - надо ли. И тут был бы рад услышать мнение специалистов, кто в этом понимает лучше или касался этого вопроса и досконально разобрался.

Re: Как правильно сделать переадресацию http на https и www

Добавлено: 22 мар 2024, 02:03
admin
Отдельно замечу, что склейка зеркал для сайта и смена главного зеркала в Яндекс Вебмастере проходит не сразу и требует времени. В справке указано две недели, но по факту это время может варьироваться, так как обновления поисковых баз данных происходят циклично. Соответственно, можно оказаться ближе к очередному обновлению или дальше от него. То есть ради одного сайта никто обновлять данные, конечно же, не будет. В самом Яндекс Вебмастере ваши запросы принимаются сразу, обрабатываются автономно, а уже результаты обработки синхронизируются с общей базой данных, вот её обновление и происходит по своему расписанию.

Re: Как правильно сделать переадресацию http на https и www

Добавлено: 26 мар 2024, 03:25
admin
Я хоть выше это упомянул, но лучше напишу отдельным постом. Роботы Яндекса больше не видят, а точнее игнорируют директиву Host в robots.txt, чтобы вы там не указали. Теперь нужно обязательная переадресация 301 или 302 в группе сайтов http, https, www и без www. То есть переадресация на один из четырёх вариантов. Даже если с ходу Яндекс укажет в качестве главного зеркала нужный вам домен, то нет никаких гарантий, что спустя время он поменяет главное зеркало из-за, к примеру, предпочтений пользователей. И повторюсь, что указанные как cannonical адреса при этом не повлияют на этот выбор. У меня именно так и случилось, почему и пришлось разбираться, как грамотно сделать переадресацию через htaccess на основное зеркало сайта. И потом ещё ждать, когда Яндекс Вебмастер созреет, ведь переезд сайта проходит далеко не сразу.

Re: Как правильно сделать переадресацию http на https и www

Добавлено: 05 апр 2024, 01:09
admin
admin писал(а): 19 мар 2024, 15:10 # Редирект с http на https
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Редирект с не-www на www
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule (.*) https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Этот вариант однозначно рабочий. После прописывания в .htaccess и указания Яндекс Вебмастеру, что сайт переехал, зеркала склеились спустя 1-2 недели, а основным зеркалом стало именно то, куда сделал переадресацию. Главное потом не удаляйте эти директивы, они должны быть в .htaccess и после того, как Яндекс поменял главное зеркало. Я с одним менее значимым сайтом провёл эксперимент и убрал, так спустя время главное зеркало сайта опять было изменено, хотя ничто на это не указывало.