Частичный редирект для robots.txt для Nginx

Категории: Серверные вопросы

В последнее время стало популярным переводить сайты на защищенный протокол https. Это повышает безопасность работы с сайтом, это якобы повышает лояльность поисковиков к сайту и вообще классно и модно.

Статей по переводу WordPress на HTTPS в сети огромное множество, поэтому не буду на этом останавливаться.

Намного интереснее задачи и проблемы которые могут возникнуть при переводе сайта на работу с SSL сертификатом.

Одна из них, это то, что Яндекс во время переезда хочет чтобы файл robots.txt был доступен ему и по протоколу http и по протоколу https.

В инструкциях для Apache пишут что можно сделать вот так:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP:X-HTTPS} !1
RewriteCond %{REQUEST_URI} !robots.txt
RewriteRule ^(.*)$ https://SiteName.ru/$1 [R=301,L]

А вот кусочек конфига который работает на Nginx. Возможно не самое изящное решение, но оно работает:

set $do_redirect  1;
if ($scheme ~* ^https$) {
    set $do_redirect 0;
}
if ($request_uri ~* ^/robots\.txt$) {
    set $do_redirect 0;
}
if ($do_redirect = 1) {
   return 301 https://$server_name$request_uri;
}

Некоторые вообще считают что это не критичная проблема и Яндекс сам разберется где ему искать новый robots.txt, но если клиент хочет, значит нужно сделать :-)

А как бы вы решили данную задачу?

Оставьте комментарий Ваш шанс быть услышанным!