Как создать файл robots.txt для всех доменов на сервере Apache

10

У нас есть настройка веб-сервера разработки 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] 

Спасибо!

Майкл Беркомпас
источник
robots.txt не является обязательным, и некоторые сканеры его игнорируют. Это не должно рассматриваться как средство защиты. Если вы хотите скрыть свой сайт, пока он не станет общедоступным, добавьте аутентификацию.
Мирча Вутцовичи

Ответы:

25

Apache mod_alias разработан для этого и доступен из базовой системы Apache, и его можно установить в одном месте, почти без затрат на обработку, в отличие от mod_rewrite.

Alias /robots.txt C:/xampp/vhosts/override-robots.txt

С этой строкой в ​​файле apache2.conf, вне всех vhost, http://example.com/robots.txt - на любом веб-сайте, который он обслуживает, будет выводить данный файл.

Алистер Булман
источник
Это. Положите Aliasв каждый <VirtualHost>блок. +1.
Стивен Понедельник
Спасибо! Это сработало отлично. Я знал, что было простое решение ...
Майкл Беркомпас
Если вы хотите, чтобы это было на каждом виртуальном хосте, вам не нужно помещать его во все из них. Он может идти на глобальном уровне, как псевдоним по умолчанию / вручную.
Алистер Булман
Спасибо за решение, хотя, увидев там C: / in, меня тошнит от осознания того, что там есть еще один сервер Windows :) Я помещаю свои правки в мой файл modules.conf или в mods-enabled / alias.conf примерно так: Alias /robots.txt /var/www/robots.txt
unc0nnected
1
Чтобы убедиться, что этот файл доступен, даже когда другие элементы управления доступом его заблокируют, поместите псевдоним и <Location "/robots.txt"> Allow from all </Location>сразу после него внутри основного<IfModule alias_module>
Walf
1

Поместите свой общий глобальный robots.txtфайл где-нибудь в файловой системе вашего сервера, которая доступна для процесса apache. Ради иллюстрации, я предполагаю, что это в /srv/robots.txt.

Затем, чтобы настроить mod_rewriteобслуживание этого файла клиентам, которые его запрашивают, поместите следующие правила в каждый <VirtualHost>блок конфигурации vhost:

RewriteEngine on
RewriteRule ^/robots.txt$ /srv/robots.txt [NC, L]

Если вы помещаете правила перезаписи в .htaccessфайлы для каждого каталога, а не в <VirtualHost>блоки, вам нужно будет немного изменить правила:

RewriteEngine on
RewriteBase /
RewriteRule ^robots.txt$ /srv/robots.txt [NC, L]
Стивен Понедельник
источник
Не могли бы вы объяснить это: «Поместите свой общий глобальный файл robots.txt где-нибудь в файловой системе вашего сервера, который доступен для процесса apache. Для иллюстрации я предположу, что он находится в /srv/robots.txt». более подробно? Мне нужно знать, что вы подразумеваете под созданием каталога, доступного для процесса apache?
Майкл Беркомпас
Каждый сайт содержится в папке, например testsite.int.devcsd.com, в папке C: \ xampp \ vhosts
Майкл Беркомпас,
@ Майкл: Не беспокойтесь об этом слишком сложном mod_rewriteхакере. Используйте Aliasвместо этого, как предложено Алистером.
Стивен Понедельник
0

Не уверен, что вы запускаете XAMPP в Linux или нет, но если вы это делаете, вы можете создать символическую ссылку со всех виртуальных хостов на один и тот же файл robots.txt, но вам нужно убедиться, что ваша конфигурация Apache для каждого виртуального хоста соответствует разрешено следовать символическим ссылкам (в соответствии с <Directory>директивами Options FollowSymLinks).

gravyface
источник
Я бы предпочел не редактировать каждое объявление vhost. Их более 30 ... Плюс, я хочу, чтобы это было автоматическое перебегание, чтобы мне не пришлось ничего делать при создании нового виртуального хоста.
Майкл Беркомпас
Майкл, просто используй sed для массового редактирования, довольно простые вещи, тебе определенно не нужно делать это вручную. Ниже
выложено
0

Другой подход к решению.

Я размещаю несколько (более 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>
aesnak
источник