同一 URL 中的多个重写规则
Multiple Rewrite rules in the same URL
我的重写规则如下,但我不明白为什么我的第二条规则不起作用。当我禁用第一个时,它会正常工作。如果两个规则的 url 完全相同,是否有限制?请注意,在我的第一个条件下,如果百度蜘蛛抓取我们的网站,我会尝试将请求映射到 NuxtJS,否则只需提供 wwwroot 目录
上的静态 HTML 文件
<?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>
没有这样的限制。
您的第一个模式在语法上无效,因此发生错误。
The expression "^((?Baidu).)*$" has a syntax that is not valid.
由于您不需要完全匹配,因此像 Baidu
这样的简单模式就可以了。查看以下规则并注意 negate="true"
.
<rules>
<clear />
<rule name="ReverseProxyInboundRule1" enabled="true" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://localhost:3000/{R:1}" />
<conditions>
<!-- if user agent contains Baidu -->
<add input="{HTTP_USER_AGENT}" pattern="Baidu" />
</conditions>
</rule>
<rule name="StaticHTMLForBaiduCrawler" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions>
<!-- if user agent does not contain Baidu -->
<add input="{HTTP_USER_AGENT}" pattern="Baidu" negate="true" />
</conditions>
<action type="Rewrite" url="{R:1}/index.html" />
</rule>
</rules>
我的重写规则如下,但我不明白为什么我的第二条规则不起作用。当我禁用第一个时,它会正常工作。如果两个规则的 url 完全相同,是否有限制?请注意,在我的第一个条件下,如果百度蜘蛛抓取我们的网站,我会尝试将请求映射到 NuxtJS,否则只需提供 wwwroot 目录
上的静态 HTML 文件<?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>
没有这样的限制。
您的第一个模式在语法上无效,因此发生错误。
The expression "^((?Baidu).)*$" has a syntax that is not valid.
由于您不需要完全匹配,因此像 Baidu
这样的简单模式就可以了。查看以下规则并注意 negate="true"
.
<rules>
<clear />
<rule name="ReverseProxyInboundRule1" enabled="true" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://localhost:3000/{R:1}" />
<conditions>
<!-- if user agent contains Baidu -->
<add input="{HTTP_USER_AGENT}" pattern="Baidu" />
</conditions>
</rule>
<rule name="StaticHTMLForBaiduCrawler" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions>
<!-- if user agent does not contain Baidu -->
<add input="{HTTP_USER_AGENT}" pattern="Baidu" negate="true" />
</conditions>
<action type="Rewrite" url="{R:1}/index.html" />
</rule>
</rules>