Как создать файл 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>
Другие вопросы по тегам