Правильные исключения для 301-редиректа

В случаях, когда ваш сайт переезжал с http на https, обычно вешается 301 редирект на все страницы. Но у этого способа есть недостатки:

  • файл robots.txt с указанием основного зеркала становится недоступным,
  • файлы для подтверждения прав, размещаемые в корне сайта, также недоступны.

Чтобы исправить эту ситуацию, я сегодня вносил правки в правила редиректа. Заодно делюсь инструкцией с читателями.

301 редирект с http на https

Существует несколько вариантов установки такого редиректа. Я использую следующий вариант (в файле .htaccess):

# BEGIN http-https
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
# END http-https

Короткий, понятный, не использует в правиле доменное имя — а значит является универсальным.

Добавление исключения для robots.txt

Чтобы отдавать файл robots.txt со статусом 200 для каждого из зеркал (http, https), нужно прописать следующее исключение:

<FilesMatch "robots.txt$">
RewriteEngine Off
</FilesMatch>

Добавление исключения для служебных файлов

Что я понимаю под такими служебными файлами: это, например, файл для подтверждения прав в Яндекс.Вебмастер, в Search Console. Зачем нужна http-версия в Яндекс.Вебмастере? Чтобы иметь доступ к информации по неосновным зеркалам — например, по внешним ссылкам.

Для исключения редиректа для такого файла добавляем аналогичный код:

<FilesMatch "yandex_2bb4f54fd14f4079.html$">
RewriteEngine Off
</FilesMatch>

Можно воспользоваться регуляркой, прицепившись за слово «yandex» или «google», но я решил использовать точное вхождение, чтобы не запутаться в лишних файлах.

Итоговый вариант редиректа с исключениями

После этих действий файл .htaccess приобретает следующий вид:

# BEGIN http-https
<FilesMatch "robots.txt$">
RewriteEngine Off
</FilesMatch>
<FilesMatch "yandex_2bb4f54fd14f4079.html$">
RewriteEngine Off
</FilesMatch>
<FilesMatch "googlef2bb4f54fd14f4079.html$">
RewriteEngine Off
</FilesMatch>
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
# END http-https

Все неосновные зеркала теперь имеют доступный для поисковых роботов файл robots.txt с указанием главного зеркала, а вебмастер имеет доступ к информации по неглавным зеркалам в Яндекс.Вебмастере и Search Console.

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.