Как обслуживать разные robots.txt для http и https на одном сайте?

11

У меня есть небольшой сайт, который обслуживает Apache (я не могу поставить Nginx вперед, ни заменить Apache на что-либо), и он настроен на обслуживание одного и того же сайта как по http, так и по https (перенаправлений http-> https нет, поэтому пока что, поэтому обе версии http и https обслуживаются параллельно).

Что мне нужно, чтобы настроить один .htaccessи тот же URI через http и через https для обслуживания другого текстового файла?

Как http://example.com/proto.txtговорит «Сайт через http», а https://example.com/proto.txt«Сайт обслуживается через https».

Кевин М
источник
У вас нет времени, чтобы проверить точный способ написания этого (и просто комментарий, а не ответ), но другой вариант, если вы не хотите или не можете изменить основную конфигурацию Apache, это использовать RewriteRuleв вашем .htaccessс условием на нем обслуживаются более HTTPS.
Jcaron
@dcaron, это именно то, что мне нужно, я просто не могу понять, как именно это сделать, и мне нужен совет или (лучше) фрагмент кода, чтобы сделать это :)
Кевин М,
Ваши http и https сайты находятся на разных сайтах <VirtualHost>. Поэтому вам просто нужно настроить другой файл robots.txt в одном из них. Примерно так:RewriteRule ^/robots.txt$ /path/to/alternative/robots.txt [L]
Петер - Восстановить Монику

Ответы:

19

Используйте псевдоним

Создайте два файла, robots.txt и robots_http.txt, и добавьте их в свой http VirtualHost:

Alias "/robots.txt" "/path/to/documentroot/robots_http.txt"
Джеральд Шнайдер
источник
Невозможно изменить настройки Vhost, можно только редактировать .htaccess, это хитрость.
Кевин М
2

Если вы не можете или не хотите изменять «основную» конфигурацию Apache, но вам нужно сделать это в .htaccessфайле, вы можете использовать RewriteRuleс, RewriteCondкоторый проверяет HTTPS.

Что-то вроде:

RewriteEngine On

RewriteCond %{HTTPS} "on"
RewriteRule robots.txt robots_https.txt [L]

должно работать (я не проверял).

Обратите внимание, что это основано на том, что Apache сам выполняет завершение HTTPS. Если HTTPS-завершение выполняется на обратном прокси-сервере перед этим, то условие, скорее всего, будет другим (и будет зависеть от конфигурации обратного прокси-сервера и Apache).

jcaron
источник