Apache 中的机器人通配符阻止

Apache 中的机器人通配符阻止

我运营一个网站,为许多开源项目提供 Subversion 和 TRAC。这非常有效,但有一个例外:许多搜索引擎并不关心,robots.txt并且对 TRAC 中的许多并行请求(例如 TRAC 变更集为 tar/zip)的 Web 服务器进行 DoS 攻击。

由于我在一个域下运行大量 TRAC 存储库,因此我使用了通配符robots.txt,根据 Google 的说法,这应该是允许的:

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

不幸的是,即使 Google 也不关心这一点,尽管网站管理员工具确认应忽略特定 URI。是的,我告诉过他们,但他们并不关心。当然,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>为每个存储库创建一个部分。我<LocationMatch>发现Apache 文档但我不确定是否可以用它来替代<Directory>

所以我的问题是,我可以使用<LocationMatch>这个吗?或者是否有人对在服务器端过滤机器人有更好的想法?

答案1

(我想按照网站的建议在线回答它,但编辑问题会导致错误消息)

我查阅了 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>

参考:

使用浏览器的用户代理切换器扩展进行测试。由于新手限制,我无法发布更多链接 :) 我的站点是 svn.netlabs.org,供想要尝试的人使用。

相关内容