私は多くのオープンソースプロジェクトに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>
を使用できますか、および/またはサーバー側でボットをフィルタリングするためのより良いアイデアを誰かが持っていますか?
(サイトの推奨に従ってインラインで回答したかったのですが、質問を編集するとエラーメッセージが表示されます)
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にあります。