Как обслуживать robots.txt для всех моих собственных поддоменов, но не для других хостов на Apache?
Мы разрабатываем веб-сайты и размещаем среду QA на том же сервере, что и производственная среда. Я хочу предоставить определенный файл robots.txt для всех сайтов контроля качества, но не для производственных сайтов. У нас много сайтов, поэтому я не хочу много обновлять сотни конфигурационных блоков vhost. Сайты QA легко идентифицируются как по доменному имени, так и по каталогу, в котором они находятся. QA и производственные сайты группируются в два разных каталога. Все сайты QA размещены на *.qa.mycompany.com.
Пример производства: host: example.org docroot: /var/www/production/example.org
Пример QA: хост: example.qa.mycompany.com docroot: /var/www/qa/example.org
Есть ли способ настроить Apache для обслуживания файла robots.txt для всех сайтов QA, но не для рабочих сайтов без необходимости обновления всех конфигураций vhost QA?
2 ответа
Вы можете добавить это
<Directory "/var/www/qa/*">
Redirect permanent robots.txt http://example.com/qa_robots.txt
</Directory>
Чтобы вы могли разместить свой файл qa-robots.txt в общедоступном месте на глобальном хосте, блок каталогов следует перенаправить на него для всех папок /qa/.
Поисковые системы также должны следовать этому перенаправлению.
Вместо перенаправления вы также можете добавить
ErrorDocument 404 "/var/www/qa_robots.txt"
Но это отправит код ошибки 404. Я не уверен, как поисковые роботы реагируют на это. Я думаю, что также может быть способ сделать это с помощью mod_rewrite и соответствующего RewriteCond
Вы можете сделать это с помощью выражения mod_alias & If, добавив это на свой сервер conf:
Alias /robots.txt /path/to/robots.txt
Alias /qa_robots.txt /path/to/robots.txt
<If "%{DOCUMENT_ROOT} =~ /(\x2Fvar\x2Fwww\x2Fqa\x2F)/">
RewriteRule ^robots\.txt$ qa_robots.txt
</If>
Если утверждение доступно только в Apache 2.4, и вы пометили свой вопрос как 2.2 и 2.4 ... так что это может не решить вашу проблему, если вы используете Apache 2.2
Как вы не можете избежать /
в заявлении, /
заменены на x2F
Я не проверял это, но теоретически это должно работать.