web-dev-qa-db-ja.com

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>

編集-@ ShaneMadden:各仮想ホストのドキュメントルートに次の.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 [email protected]
 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>
3

これを試してみてください。失敗した場合は、.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

このパターンに従い、最後のパターンに[OR]を付けないでください。

編集:新しい解決策:

すべての(友好的な)ボットをブロックしたい場合は、「robots.txt」というファイルを作成し、index.htmlがある場所に配置します。その中に、これを入れてください:

User-agent: *
Disallow: /

Robots.txtを無視するボットを禁止するには、元の回答(上記)のようなリストを維持する必要があります。

1
U4iK_HaZe

後でこれを読むかもしれない人々の利益のために、ここに取引があります:

.htaccessファイルからorderallow、denyディレクティブを削除し、FirefoxのUser Agent Switcherでスプーフィングしたときに、特定のユーザーエージェントに対して期待される動作をトリガーできたため、競合が発生したようです。ただし、リストにある他のユーザーエージェントはブロックされませんでした。これは、httpd.confで使用されているカラット(^)の重要性が不明だったためです。私が読んだ正規表現のチュートリアルにはこれが記載されていましたが、最初は実際には沈みませんでした。カラットはサーバーにvery beginonlyに見せるように強制します。接続要求を解析するときの全体ユーザーエージェント文字列(私が最初に考えたように、内部の個々の文字列ではありません)。ブロックしたい一部のスパイダーとボットのキー識別文字列は、後でユーザーエージェント文字列で発生するため、動作させるにはカラットをドロップする必要がありました。

0