我想使用 IIS 阻止机器人。使用 Apache,您可以向 .htaccess 文件添加命令,如下所示此处概述。如何使用 IIS 7.5 实现这一点?
更新
除了以下答案之外,自发布此问题以来,我还发现了总共几种方法:
- 接受的答案中列出了 URL 扫描选项。
- 定义请求过滤规则(下面的示例)
- 定义 URL 重写规则(如下例所示)
请求过滤规则
<system.webServer>
<security>
<requestFiltering>
<filteringRules>
<filteringRule name="BlockSearchEngines" scanUrl="false" scanQueryString="false">
<scanHeaders>
<clear />
<add requestHeader="User-Agent" />
</scanHeaders>
<appliesTo>
<clear />
</appliesTo>
<denyStrings>
<clear />
<add string="YandexBot" />
</denyStrings>
</filteringRule>
</filteringRules>
</requestFiltering>
</security>
[...]
</system.webServer>
URL 重写规则
<rule name="RequestBlockingRule1" patternSyntax="Wildcard" stopProcessing="true">
<match url="*" />
<conditions>
<add input="{HTTP_USER_AGENT}" pattern="YandexBot" />
</conditions>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden: Access is denied." statusDescription="Get Lost." />
</rule>
对于我的上一个项目,我最终选择了选项 2,因为它以安全性为重点并且基于 IIS 7 内置的集成 URL 扫描。
答案1
通常情况下,您使用 robots.txt。它适用于所有行为良好的机器人。
对于行为不当的机器人,您通常无能为力。您可以在防火墙或网络服务器中限制连接数或带宽,但主要机器人通常会使用多个 IP 地址。基于用户代理字符串进行限制通常不是一个好主意,因为这些对于机器人来说很容易欺骗,并且不关心 robots.txt 的机器人也倾向于欺骗用户代理字符串。它在特定情况下有效,即机器人发送正确的用户代理,但不遵守 robots.txt。
编辑:如果您确实想根据用户代理进行阻止,而不是将其推回防火墙或类似程序,我认为最简单的方法是使用 URLScan。您可以编写一条如下所示的规则:
[Options]
RuleList=DenyYandex
[DenyYandex]
DenyDataSection=Agents
ScanHeaders=User-Agent
[Agents]
Yandex
答案2
我知道这是一个老问题,但是在 IIS 7.5 中,如果您使用请求过滤,则可以通过用户代理拒绝。
在 IIS 中,转到要应用过滤器的网站,然后在右侧窗格中单击请求过滤图标。(您可能必须通过服务器管理器启用此功能)。
点击规则选项卡,然后在最右侧列表中选择“添加过滤规则”
给它起个名字,然后在扫描标题部分,输入“User-Agent”。
您可以添加任何特定文件类型来阻止适用于,或者您可以将其留空以使其适用于所有文件类型。
在拒绝字符串,输入您要阻止的所有用户代理字符串。对于这个问题,您可以在此处输入“Yandex”。
我使用 chrome 确认了这些更改用户代理切换器扩大。
答案3
对于不遵守 Robots.txt 的爬虫程序,您可以在服务器上使用 URL Rewrite 根据其用户代理进行阻止,请参阅: http://chrisfulstow.com/using-the-iis-7url-rewrite-module-to-block-crawlers/
这是一种简单的方法,可以阻止主要的网络爬虫(Google Bing 和 Yahoo)在整个服务器上索引任何网站。如果您将所有测试版本推送到面向公众的服务器,但又不希望搜索引擎索引它们,这种方法非常有用。
安装 IIS URL 重写模块。
在服务器级别,添加请求阻止规则。阻止与正则表达式匹配的用户代理标头:googlebot|msnbot|slurp。
或者,只需将此规则粘贴到“C:\Windows\System32\inetsrv\config\applicationHost.config”
<system.webServer> <rewrite> <globalRules> <rule name="RequestBlockingRule1" stopProcessing="true"> <match url=".*" /> <conditions> <add input="{HTTP_USER_AGENT}" pattern="googlebot|msnbot|slurp" /> </conditions> <action type="CustomResponse" statusCode="403" statusReason="Forbidden: Access is denied." statusDescription="You do not have permission to view this page." /> </rule> </globalRules> </rewrite> </system.webServer>
这将阻止 Google、Bing 和 Yahoo 索引服务器上发布的任何网站。要测试它,请尝试Firefox 用户代理切换器。