Правильные исключения для 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.