Могу ли я блокировать поисковые сканеры для каждого сайта на веб-сервере Apache?

У меня есть какой-то промежуточный сервер в общедоступном Интернете, на котором запущены копии производственного кода для нескольких сайтов. Мне бы это не понравилось, если индексированные сайты.

Есть ли способ изменить мой httpd.conf на промежуточном сервере, чтобы блокировать поисковые роботы?

Изменение файла robots.txt действительно не работает, поскольку я использую скрипты для копирования одной и той же базы кода на оба сервера. Кроме того, я бы предпочел не изменять файлы конфигов виртуального хоста, так как есть куча сайтов, и я не хочу забывать копировать по определенной настройке, если я создаю новый сайт.

Ответы

Ответ 1

Создайте файл robots.txt со следующим содержимым:

User-agent: *
Disallow: /

Поместите этот файл где-нибудь на ваш промежуточный сервер; ваш корень каталога - отличное место для него (например, /var/www/html/robots.txt).

Добавьте в свой файл httpd.conf следующее:

# Exclude all robots
<Location "/robots.txt">
    SetHandler None
</Location>
Alias /robots.txt /path/to/robots.txt

Директива SetHandler, вероятно, не требуется, но может потребоваться, например, если вы используете обработчик, например mod_python.

Теперь этот файл robots.txt будет обслуживаться для всех виртуальных хостов на вашем сервере, переопределяя любой файл robots.txt, который может иметь для отдельных хостов.

(Примечание. Мой ответ - это, по сути, то же самое, что ответ ceejayoz предполагает, что вы это делаете, но мне пришлось потратить несколько лишних минут на выяснение всех особенностей, чтобы заставить его работать. Я решил поставить этот ответ здесь для ради других, которые могут наткнуться на этот вопрос.)

Ответ 2

Вы можете использовать Apache mod_rewrite для этого. Предположим, что ваш настоящий хост - www.example.com, а ваш промежуточный узел - staging.example.com. Создайте файл с именем "robots-staging.txt" и условно перепишите запрос, чтобы перейти к нему.

Этот пример был бы подходящим для защиты одного промежуточного сайта, немного более простого варианта использования, чем того, о чем вы просите, но это работало надежно для меня:

<IfModule mod_rewrite.c>
  RewriteEngine on

  # Dissuade web spiders from crawling the staging site
  RewriteCond %{HTTP_HOST}  ^staging\.example\.com$
  RewriteRule ^robots.txt$ robots-staging.txt [L]
</IfModule>

Вы можете попытаться перенаправить пауков в мастер robots.txt на другом сервере, но некоторые из пауков могут перестать после того, как они получат от HTTP-запроса ничего, кроме кода возврата "200 OK" или "404 не найден", и они могут не читать перенаправленный URL-адрес.

Вот как вы это сделаете:

<IfModule mod_rewrite.c>
  RewriteEngine on

  # Redirect web spiders to a robots.txt file elsewhere (possibly unreliable)
  RewriteRule ^robots.txt$ http://www.example.com/robots-staging.txt [R]
</IfModule>

Ответ 3

Могли бы вы alias robots.txt на промежуточных виртуальных хостах на ограничительный файл robots.txt размещаться в другом месте?

Ответ 4

Чтобы по-настоящему остановить индексирование страниц, вам нужно скрыть сайты HTTP auth. Вы можете сделать это в своей глобальной конфигурации Apache и использовать простой файл .htpasswd.

Единственным недостатком этого является то, что теперь вы должны вводить имя пользователя/пароль при первом просмотре на любые страницы промежуточного сервера.

Ответ 5

В зависимости от вашего сценария развертывания вы должны искать способы развертывания различных файлов robots.txt для dev/stage/test/prod (или любой другой комбинации). Предполагая, что у вас разные файлы конфигурации базы данных или (или что-то подобное) на разных серверах, это должно следовать аналогичному процессу (у вас есть разные пароли для ваших баз данных, верно?)

Если у вас нет одноэтапного процесса развертывания, это, вероятно, хорошая мотивация, чтобы получить один... есть множество инструментов для разных сред - Capistrano - довольно хороший, и он предпочитает мир Rails/Django, но ни в коем случае не единственный.

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