我有一个 IIS 服务器,它最初在 wwwroot 中托管静态 HTML,但后来我们决定,如果百度蜘蛛尝试爬网,我们会将流量映射到也在 IIS 服务器旁边运行的 NuxtJS Web 服务器。
因此,我们安装了 ARR(应用程序请求路由)以启用反向代理,它工作正常,现在我们首先尝试测试 URL 重写入站规则的位置:
- 如果百度蜘蛛将请求映射到 NuxtJS 服务器(http://localhost:3000)(这是为了先测试)
因此,我们希望如果普通用户请求,那么它将在 wwwroot 中提供静态 HTML,因为它没有达到规则,而是我得到了 500。
记笔记:
- 我正在使用 Windows 2012 和 IIS 8.5 版
- 如果我禁用我的入站规则,那么它肯定会提供静态 HTML 文件
那么我需要创建另一个规则吗?我期待如果它没有达到任何规则,它刚刚在 wwwroot 中读取的默认行为将会发生
更新
- 我决定为我的静态 HTML 服务创建另一个规则。下面是 IIS 生成的重写规则。我现在的问题是第二条规则不起作用。当我禁用第一条规则时,第二条规则就会起作用
<?xml version="1.0" encoding="UTF-8"?>
<rules>
<clear />
<rule name="ReverseProxyInboundRule1" enabled="true" stopProcessing="false">
<match url="(.*)" />
<action type="Rewrite" url="http://localhost:3000/{R:1}" />
<conditions>
<add input="{HTTP_USER_AGENT}" pattern="^((?Baidu).)*$" />
</conditions>
</rule>
<rule name="StaticHTMLForBaiduCrawler" enabled="true" stopProcessing="false">
<match url="(.*)" />
<conditions>
<add input="{HTTP_USER_AGENT}" pattern="^((?!Baidu).)*$" />
</conditions>
<action type="Rewrite" url="{R:1}/index.html" />
</rule>
</rules>
第一条规则中条件中的正则表达式不是 IIS 的有效正则表达式。如果您希望在用户代理包含百度时触发第一条规则,而在不包含百度时触发第二条规则,则可以执行以下操作。注意第二条规则中条件的否定: