我正在使用以下IIS重写规则来阻止尽可能多的机器人.

<rule name="BotBlock" stopProcessing="true">
  <match url=".*" />
  <conditions>
    <add input="{HTTP_USER_AGENT}" pattern="^$|bot|crawl|spider" />
  </conditions>
  <action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
</rule>

此规则阻止所有具有空User—Agent字符串或包含botcrawlspider的User—Agent字符串的请求.这工作很好,但它也块googlebot,我不想要.

那么,我如何从上面的模式中排除googlebot字符串,使它击中网站.

我试过

^$|!googlebot|bot|crawl|spider

^$|(?!googlebot)|bot|crawl|spider

^(?!googlebot)$|bot|crawl|spider

^$|(!googlebot)|bot|crawl|spider

但他们要么阻止所有的用户代理,要么仍然不允许googlebot.谁有一个解决方案,并了解一些regex?

So thanks to The fourth bird the solution becomes:

<add input="{HTTP_USER_AGENT}" pattern="^$|\b(?!.*googlebot.*\b)\w*(?:bot|crawl|spider)\w*" />

推荐答案

如果你想匹配bot,而不是google bot:

^$|(?<!\bgoogle)bot|crawl|spider

Regex demo

或者,您可以将备选项分组到一个非捕获组中,并用单词边界将该组包围,以防止所有备选项的部分匹配:

^$|\b(?:bot|crawl|spider)\b

Regex demo

Asp.net相关问答推荐

如何格式化搜索字符串以从 Razor 页表中的多个列返回部分搜索字符串?

此版本的 SQL Server 不支持用户实例登录标志.连接将关闭

如何向 Array.IndexOf 添加不区分大小写的选项

创建一个供 ASP.NET 应用程序中的所有线程使用的静态 Regex 对象是否有效?

解析器错误消息:文件/TestSite/Default.aspx.cs不存在

下载功能在 asp.net 的更新面板中不起作用

如何在 ASP.NET 中使用时区?

System.Web.HttpContext 无法识别

是否有用于 Asp.net 标记的#IF DEBUG?

aspx 文件中的 if 语句

asp.net 中的 Eval() 有什么用

错误:无法在 Web 服务器上开始调试... ASP.NET 4.0

oAuth ASP.NET 成员资格提供程序

使用 Asp.Net MVC 和 Web Api 配置 Ninject

如何从 NuGet 安装 EntityFramework 5.0(和其他旧版本)?

如何在 asp.net 中更改 DataBinder.Eval 的日期格式?

对于 DB ID,需要一个较小的 GUID 替代方案,但对于 URL 仍然是唯一且随机的

字体真棒里面asp按钮

System.Drawing.Image.FromFile() 上的内存不足异常

您将如何将 ASP.Net MVC 嵌入到现有的网站项目中?