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

Редирект с http на https c исключением для robots.txt

СообщениеДобавлено: Чт мар 16, 2017 11:10 am
Gvenv_nk
Товариши, в первых же строках прошу отнестись к моей беде сочувственно и тапками не кидаться, т.к. я, увы, не программист, а махровый гуманитарий-недоучка. Заранее благодарна за советы или полезные ссылки.

Теперь перейду к проблеме.

После перехода сайта на https при попытке проанализировать файл robots.txt Яндекс вебмастер выдает ошибку "Сервер отвечает редиректом на запрос /robots.txt"
По логике, наверное, надо в .htaccess в правило редиректа на .https добавить исключение для robots.txt.

У меня этот редирект в .htaccess (работающий вариант) выглядит так:

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^site\.ru$
RewriteCond %{HTTPS} off
RewriteRule (.*) https://site.ru/$1 [L,R]

RewriteCond %{HTTP_HOST} ^www\.site\.ru$
RewriteCond %{HTTPS} off
RewriteRule (.*) https://www.site.ru/$1 [L,R]

RewriteCond %{HTTP_HOST} ^site\.com$
RewriteCond %{HTTPS} on
RewriteRule (.*) http://site.com/$1 [L,R]

RewriteCond %{HTTP_HOST} ^arenda\.site\.ru$
RewriteCond %{HTTPS} on
RewriteRule (.*) http://arenda.site.ru/$1 [L,R]

(последние правила добавлены для дочерних сайтов, которые должны работать по http, т.к. ssl-сертификат только один)

Вопрос: как грамотно сформулировать этот редирект? И все ли я правильно делаю (что вряд ли)?

СообщениеДобавлено: Пт мар 17, 2017 4:00 am
Emilien
Для исключения достаточно добавить проверку, что %{REQUEST_URI} не равен /robots.txt
Код: выделить все
RewriteCond %{REQUEST_URI} !=/robots.txt


^site\.ru$ и ^www\.site\.ru$ можно объединить в одно условие:
Код: выделить все
RewriteCond %{HTTP_HOST} ^(www\.)?site\.ru$


Флаг [R] в таком виде означает редирект с кодом 302.
[R=301] — редирект с кодом 301.
301 — постоянное перенаправление;
302/303/307 — временное перенаправление;
https://yandex.ru/support/webmaster/rob ... irects.xml


В итоге необходимо вот этот фрагмент:
RewriteCond %{HTTP_HOST} ^site\.ru$
RewriteCond %{HTTPS} off
RewriteRule (.*) https://site.ru/$1 [L,R]

RewriteCond %{HTTP_HOST} ^www\.site\.ru$
RewriteCond %{HTTPS} off
RewriteRule (.*) https://www.site.ru/$1 [L,R]


Заменить на такой:
Код: выделить все
RewriteCond %{REQUEST_URI} !=/robots.txt
RewriteCond %{HTTP_HOST} ^(www\.)?site\.ru$
RewriteCond %{HTTPS} off
RewriteRule (.*) https://www.site.ru/$1 [L,R=301]

СообщениеДобавлено: Пт мар 17, 2017 7:34 am
Gvenv_nk
Emilien, огромное спасибо, вы мне очень помогли!
Удачи вам!