我想根据以下规则将某些网页从旧网站(oldsite.com)重定向到新网站(newsite。*):
为此,我创建了以下规则(在本例中为sv):
<rule name="Redirect /sv to .se" stopProcessing="true">
<match url="^sv/?$" />
<action type="Redirect" url="http://newsite.se" />
</rule>
<rule name="Redirect /sv/* except some pages" stopProcessing="true">
<match url="^sv/.+" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_URI}" pattern="^sv/page1(.*)" negate="true" />
<add input="{REQUEST_URI}" pattern="^sv/page2(.*)" negate="true" />
</conditions>
<action type="Redirect" url="http://newsite.se" />
</rule>
第一条规则运作正常但不是第二条规则。问题是我的否定条件似乎不起作用。当我输入oldsite.com/sv/page1时,我仍然会被重定向到newsite.se。也许我误解了否定条件是如何工作的,但是当且仅当两个条件都为真(评估为假)时,第二条规则不应该执行动作,即REQUEST_URI 不匹配/ page1和/ page2?
答案 0 :(得分:9)
你很了解这个概念。
唯一的问题是,{REQUEST_URI}
始终以/
开头,并且网址永远不会与^sv/page1(.*)
这样的模式匹配,最后您会有一个全新的误报。
因此,您需要在模式中包含前导斜杠。
<add input="{REQUEST_URI}" pattern="^/sv/page1(.*)" negate="true" />
<add input="{REQUEST_URI}" pattern="^/sv/page2(.*)" negate="true" />