如果我在我的Web.config文件中使用httpRedirect
和rewrite
,如何指定哪個規則優先?IIS重定向規則優先
例如,假設我有一個通用的規則,如wildcard="*"
,但也有一個wildcard="/news" destination="/new/news"
,似乎只有wildcard="*"
規則被執行。
有可能從Apache獲得這樣的行爲;我想在IIS中必須有一種方法。
如果我在我的Web.config文件中使用httpRedirect
和rewrite
,如何指定哪個規則優先?IIS重定向規則優先
例如,假設我有一個通用的規則,如wildcard="*"
,但也有一個wildcard="/news" destination="/new/news"
,似乎只有wildcard="*"
規則被執行。
有可能從Apache獲得這樣的行爲;我想在IIS中必須有一種方法。
優先級與它們指定的順序相同。IIS管理器有一個「向上移動」和「向下移動」按鈕,可以爲您重新命令它們。
例如:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Rule1" stopProcessing="true">
<match url="^foo/?bar=123"/>
<action type="Rewrite" url="foo.aspx?bar=special" appendQueryString="false" />
</rule>
<rule name="Rule2" stopProcessing="true">
<match url="^foo/?bar=([A-z0-9]+)"/>
<action type="Rewrite" url="foo.aspx?bar={R:1}" appendQueryString="false" />
</rule>
<rule name="Rule3" stopProcessing="true">
<match url="^foo/"/>
<action type="Rewrite" url="somethingElse.aspx" appendQueryString="false" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
考慮爲/foo?bar=123
的傳入請求。
在這個例子中,因爲是Rule1
第一,這意味着請求將被重寫到foo.aspx?bar=special
代替foo.aspx?bar=123
,即使它同時匹配Rule1
,Rule2
,和Rule3
。
stopProcessing="true"
屬性確保不執行其他匹配規則(即Rule2
和Rule3
)。
在IIS每個配置電平可以具有定義的零條或多個重寫規則。 規則按照指定的順序進行評估。 URL重寫模塊通過使用以下算法來處理該組規則:
- 首先,將URL與規則的模式進行匹配。如果不匹配,URL重寫模塊會立即停止處理該規則,並繼續執行下一個規則。
- 如果模式匹配並且規則沒有條件,則URL重寫模塊將執行爲此規則指定的操作,然後繼續下一個規則,在此處使用替代的URL作爲該規則的輸入。
- 如果模式匹配且規則有條件,則URL重寫模塊將評估條件。如果評估成功,則執行指定的規則操作,然後重寫URL作爲輸入到後續的規則
你能在web.config文件的上下文解釋一下嗎?我對gui一無所知。 – tau
@tau我已經更新了我的答案。 – Dai
非常感謝你!我會盡快嘗試。 – tau