web-dev-qa-db-ja.com

Apacheでのボットのワイルドカードブロッキング

私は多くのオープンソースプロジェクトにSubversionとTRACを提供するサイトを運営しています。これは1つの例外を除いて非常にうまく機能します。多くの検索エンジンは、robots.txtを気にせず、TRACで多くの並列要求があるWebサーバーをDoSします。たとえば、tar/ZipなどのTRACチェンジセットです。

1つのドメインで多数のTRACリポジトリを実行しているため、robots.txtでワイルドカードを使用します。これはGoogleによると許可されているはずです。

User-agent: *
Disallow: /*/changeset
Disallow: /*/browser
Disallow: /*/log

残念ながら、ウェブマスターツールは特定のURIを無視する必要があることを確認していますが、Googleでさえ気にしません。はい、私は彼らに話しましたが、彼らは本当に気にしませんでした。確かに、Yandexのような他の人もそれを気にしません。

したがって、プランBはApache構成でそれらをロックアウトすることです。私の友人は、それを行う方法についていくつかのヒントを教えてくれました。

<Directory /foo/bar>
                SetEnvIf User-Agent Yandex BlockYandex=1
                SetEnvIf User-Agent METASpider BlockMETASpider=1
                SetEnvIf User-Agent Mail.ru BlockMailru=1
                Order allow,deny
                Allow from all
                Deny from env=BlockYandex
                Deny from env=BlockMETASpider
                Deny from env=BlockMailru
</Directory>

今、私はワイルドカードでもそのようなことができるかどうかを考えようとしているので、リポジトリごとに<Directory>セクションを実行する必要はありません。 Apache docs<LocationMatch>を見つけましたが、それを<Directory>の代わりに使用できるかどうかわかりません。

だから私の質問は、そのために<LocationMatch>を使用できますか、および/またはサーバー側でボットをフィルタリングするためのより良いアイデアを誰かが持っていますか?

2
Adrian Gschwend

(サイトの推奨に従ってインラインで回答したかったのですが、質問を編集するとエラーメッセージが表示されます)

Apache.orgでさらにドキュメントをチェックして、自分で理解しました。

   # get rid of the bots which are too stupid to respect robots.txt
   <LocationMatch "/[^/]+/(browser|changeset|log)">
      BrowserMatchNoCase googlebot ImBot
      BrowserMatchNoCase Yandex ImBot
      BrowserMatchNoCase bingbot ImBot
      Order allow,deny
      Allow from all
      Deny from env=ImBot
   </LocationMatch>

参照:

ブラウザのuser-agent-switcher拡張機能を使用してテストします。 noob-limitationsのため、これ以上リンクを投稿することはできません:)私のサイトは、ライブで試してみたい人のためにsvn.netlabs.orgにあります。

1
Adrian Gschwend