[英]IIS URL rewriting rule not working for entire site
我的目標是將以下 URL 轉發到新站點(需要完全匹配,因為我對 oldsite.com/test.aspx 有其他規則):
我用的是:
<rule name="Redirect" stopProcessing="true">
<match url="oldsite.com$" ignoreCase="false" />
<conditions logicalGrouping="MatchAny">
<add input="{HTTP_HOST}" pattern="oldsite.com" />
<add input="{HTTP_HOST}" pattern="www.oldsite.com" />
<add input="{HTTP_HOST}" pattern="oldsite.com/" />
<add input="{HTTP_HOST}" pattern="www.oldsite.com/" />
</conditions>
<action type="Redirect" url="http://newsite.com" appendQueryString="false" />
</rule>
我的規則不起作用,我想知道為什么
HTTP Host 標頭從不包含/
,因此以/
結尾的{HTTP_HOST}
條件是多余的。
<match url="oldsite.com$"
另一方面只是意味着只匹配以oldsite.com
結尾的路徑(而不是 URL)。
例如:
http://whatever/something-oldsite.com
匹配。http://whatever/oldsite.com
匹配。http://whatever/oldsite.comA
不匹配。http://whatever/oldsite.co
不匹配。顯然這不是你想要的。
此外,請記住,在正則表達式中,文字點字符 ( .
) 表示“與任何字符匹配”。 例如,這會意外地導致您的模式與諸如http://whatever/oldsiteZcom
類的 URL 匹配。 當您尋找文字點時,請記住在模式中使用反斜杠轉義點。
<match>
元素的url
屬性在這里有點模棱兩可,我一直想知道為什么微軟選擇這個名字,比如<match path="..
你的困惑,我在那里。
無論如何,您正在尋找確切的空路徑,因此您需要如下規則。
<rule name="Redirect" stopProcessing="true">
<match url="^$" ignoreCase="false" /> <!-- path is empty, just starts (^) and ends ($), does not contain anything -->
<conditions>
<add input="{HTTP_HOST}" pattern="^oldsite\.com$" /> <!-- host name literally equals to oldsite.com -->
<add input="{HTTP_HOST}" pattern="^www\.oldsite\.com$" /> <!-- host name literally equals to www.oldsite.com -->
</conditions>
<action type="Redirect" url="http://newsite.com" appendQueryString="false" />
</rule>
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.