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

Вопрос задан: 11 лет назад Последняя активность: 8 лет назад
up 18 down

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

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

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

6 ответов

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

Реклама

up 34 down accepted

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

up 4 down

Вы можете использовать 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>
up 2 down

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

up 2 down

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

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

up 1 down

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

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

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

up 0 down

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