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

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

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

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

Ответы [ 6 ]

34 голосов
/ 09 сентября 2011

Создайте файл 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, который вам предлагается, но мне пришлось потратить несколько дополнительных минут, чтобы выяснить все особенности, чтобы заставить его работать. ради других, кто может наткнуться на этот вопрос.)

4 голосов
/ 14 августа 2009

Вы можете использовать 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 на другом сервере, но некоторые из пауков могут отказываться после того, как они получат что-то кроме кода возврата «200 OK» или «404 not found» из запроса HTTP, и они могут не прочитать перенаправленный 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>
2 голосов
/ 22 октября 2008

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

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

2 голосов
/ 22 октября 2008

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

1 голос
/ 22 октября 2008

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

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

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

0 голосов
/ 22 октября 2008

Попробуйте Использование Apache для остановки плохих роботов . Вы можете получить пользовательских агентов онлайн или просто разрешить браузеры, вместо того, чтобы пытаться заблокировать всех ботов.

...