Блокировка строкой user-agent в httpd.conf не эффективна

Я хотел бы заблокировать некоторых пауков и плохих ботов с помощью текстовой строки пользовательского агента для всех моих виртуальных хостов через httpd.conf, но пока не добился успеха. Ниже приведено содержимое моего файла http.conf. Есть идеи, почему это не работает? Env_module загружен.

SetEnvIfNoCase User-Agent "^BaiDuSpider" UnwantedRobot
SetEnvIfNoCase User-Agent "^Yandex" UnwantedRobot
SetEnvIfNoCase User-Agent "^Exabot" UnwantedRobot
SetEnvIfNoCase User-Agent "^Cityreview" UnwantedRobot
SetEnvIfNoCase User-Agent "^Dotbot" UnwantedRobot
SetEnvIfNoCase User-Agent "^Sogou" UnwantedRobot
SetEnvIfNoCase User-Agent "^Sosospider" UnwantedRobot
SetEnvIfNoCase User-Agent "^Twiceler" UnwantedRobot
SetEnvIfNoCase User-Agent "^Java" UnwantedRobot
SetEnvIfNoCase User-Agent "^YandexBot" UnwantedRobot
SetEnvIfNoCase User-Agent "^bot*" UnwantedRobot
SetEnvIfNoCase User-Agent "^spider" UnwantedRobot
SetEnvIfNoCase User-Agent "^crawl" UnwantedRobot
SetEnvIfNoCase User-Agent "^NG\ 1.x (Exalead)" UnwantedRobot
SetEnvIfNoCase User-Agent "^MJ12bot" UnwantedRobot

<Directory "/var/www/">
    Order Allow,Deny
    Allow from all
    Deny from env=UnwantedRobot
</Directory>
<Directory "/srv/www/">
    Order Allow,Deny
    Allow from all
    Deny from env=UnwantedRobot
</Directory>

РЕДАКТИРОВАТЬ - @Shane Madden: у меня есть файлы.htaccess в корне каждого виртуального хоста со следующим.

order allow,deny
deny from xxx.xxx.xxx.xxx
deny from xx.xxx.xx.xx
deny from xx.xxx.xx.xxx
...
allow from all

Может ли это создать конфликт? Пример конфигурации VirtualHost:

<VirtualHost xx.xxx.xx.xxx:80>
 ServerAdmin admin@domain.com
 ServerName domain.com
 ServerAlias www.domain.com
 DocumentRoot /srv/www/domain.com/public_html/
 ErrorLog "|/usr/bin/cronolog /srv/www/domain.com/logs/error_log_%Y-%m"
 CustomLog "|/usr/bin/cronolog /srv/www/domain.com/logs/access_log_%Y-%m"     combined
</VirtualHost>

2 ответа

Попробуйте это, и если это не удастся, попробуйте в файле.htaccess...

   #Bad bot removal
   RewriteEngine on
   RewriteCond %{HTTP_USER_AGENT} ^useragent1 [OR]
   RewriteCond %{HTTP_USER_AGENT} ^useragent2 [OR]
   RewriteCond %{HTTP_USER_AGENT} ^useragent3
   RewriteRule ^(.*)$ http://website-you-want-to-send-bad-bots-to.com

Следуйте этой схеме и не ставьте [ИЛИ] на самый последний.

РЕДАКТИРОВАТЬ: Новое решение:

Если вы хотите заблокировать всех (дружественных) ботов, создайте файл с именем "robots.txt" и поместите его туда, где находится ваш index.html. Внутри него поместите это:

User-agent: *
Disallow: /

Вам все еще нужно поддерживать список, как мой первоначальный ответ (выше), чтобы запретить ботам, которые игнорируют robots.txt.

Для тех, кто может прочитать это позже, вот предложение:

Я удалил разрешающий порядок, запретил директивы из моих файлов.htaccess и смог вызвать ожидаемое поведение для определенных пользовательских агентов, когда я подделал их с помощью User Agent Switcher в Firefox, так что, похоже, возник конфликт. Другие пользовательские агенты в моем списке, однако, не были заблокированы - но это потому, что мне было неясно, какое значение в карате (^) используется в моем httpd.conf. В руководствах по регулярным выражениям, которые я читал, говорилось об этом, но поначалу это не имело смысла: карат заставляет сервер смотреть только на самое начало всей строки пользовательского агента (а не на отдельные строки внутри, как я изначально думал), когда парсинг запроса на соединение Поскольку ключевая строка, идентифицирующая некоторых из пауков и ботов, которую я хочу заблокировать, встречается позже в строке пользовательского агента, мне нужно было сбросить карат, чтобы все заработало.

Другие вопросы по тегам