Как создать файл robots.txt для всех доменов на сервере Apache
У нас есть настройка веб-сервера разработки XAMPP Apache с виртуальными хостами, и мы хотим, чтобы служба serps не сканировала все наши сайты. Это легко сделать с помощью файла robots.txt. Однако мы бы не хотели включать disallow robots.txt в каждый vhost, а затем должны были бы удалить его, когда мы начали работу с сайтом на другом сервере.
Есть ли способ с помощью конфигурационного файла apache переписать все запросы в robots.txt для всех vhosts в один файл robots.txt?
Если да, не могли бы вы привести пример? Я думаю, что это будет что-то вроде этого:
RewriteEngine On
RewriteRule .*robots\.txt$ C:\xampp\vhosts\override-robots.txt [L]
Спасибо!
4 ответа
Apache mod_alias разработан для этого и доступен из базовой системы Apache, и может быть установлен в одном месте, почти без затрат на обработку, в отличие от mod_rewrite.
Alias /robots.txt C:/xampp/vhosts/override-robots.txt
С этой строкой в файле apache2.conf, вне всех vhost, http://example.com/robots.txt - на любом веб-сайте, который он обслуживает, будет выводить данный файл.
Поместите свой общий глобальный robots.txt
файл в файловой системе вашего сервера, доступный для процесса apache. Для иллюстрации, я предполагаю, что это в /srv/robots.txt
,
Затем, чтобы настроить mod_rewrite
чтобы предоставить этот файл клиентам, которые его запрашивают, поместите следующие правила в каждый vhost <VirtualHost>
блок конфигурации:
RewriteEngine on
RewriteRule ^/robots.txt$ /srv/robots.txt [NC, L]
Если вы помещаете правила перезаписи в каталог .htaccess
файлы, а не <VirtualHost>
блоки, вам нужно будет немного изменить правила:
RewriteEngine on
RewriteBase /
RewriteRule ^robots.txt$ /srv/robots.txt [NC, L]
Не уверен, что вы запускаете XAMPP в Linux или нет, но если вы это делаете, вы можете создать символическую ссылку со всех виртуальных хостов на один и тот же файл robots.txt, но вам нужно убедиться, что ваша конфигурация Apache для каждого виртуального хоста соответствует разрешено переходить по символическим ссылкам (под <Directory>
директивы Options FollowSymLinks
).
Другой подход к решению.
Я размещаю несколько (более 300) виртуальных хостов в своей кластерной среде. Чтобы защитить мои серверы от сбоев сканерами, я определяю задержку сканирования на 10 секунд.
Однако я не могу принудить всех своих клиентов с фиксированной конфигурацией robots.txt. Я позволяю своим клиентам использовать их собственный файл robots.txt, если они хотят.
Модуль перезаписи сначала проверяет, существует ли файл. Если он не существует, модули перезаписывают в мою конфигурацию по умолчанию. Пример кода ниже...
Чтобы сохранить внутреннюю перезапись, следует использовать псевдоним. Вместо того, чтобы определять новый псевдоним, который может вызвать некоторые конфликты на стороне пользователя, я поместил мой robots.txt в папку /APACHE/error/, которая уже имеет псевдоним в качестве конфигурации по умолчанию.
<Directory /HOSTING/*/*/public_html>
Options SymLinksIfOwnerMatch
<Files robots.txt>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule (.*) - [L]
RewriteRule (.*) /error/robots.txt [L]
</Files>
</Directory>