У нас есть настроенный веб-сервер разработки XAMPP Apache с виртуальными хостами, и мы хотим, чтобы серпы не сканировали все наши сайты. Это легко сделать с помощью файла robots.txt. Однако мы не хотели бы включать запрещающий файл robots.txt в каждый виртуальный хост, а затем удалять его, когда мы запускаем сайт на другом сервере.
Есть ли способ с помощью файла конфигурации apache переписать все запросы к robots.txt на всех vhosts в один файл robots.txt?
Если да, то не могли бы вы привести мне пример? Думаю, это будет примерно так:
RewriteEngine On
RewriteRule .*robots\.txt$ C:\xampp\vhosts\override-robots.txt [L]
Спасибо!
Apache mod_alias разработан для этого и доступен из базовой системы Apache и может быть установлен в одном месте почти без дополнительных затрат на обработку, в отличие от mod_rewrite.
Alias /robots.txt C:/xampp/vhosts/override-robots.txt
С этой строкой в файле apache2.conf, за пределами всех виртуальных хостов, http://example.com/robots.txt - на любом веб-сайте, который он обслуживает, будет выводить данный файл.
Поместите свой общий глобальный robots.txt
файл где-нибудь в файловой системе вашего сервера, доступный для процесса apache. Для иллюстрации я предполагаю, что это в /srv/robots.txt
.
Затем, чтобы настроить mod_rewrite
чтобы передать этот файл клиентам, которые его запрашивают, поместите следующие правила в каждый виртуальный хост <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) виртуальных хостов в своей кластерной среде. Чтобы защитить мои серверы от сбоев сканерами, я определяю Crawl-delay на 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>