Dot-Net
IIS 重定向規則優先級
如果我在我的 Web.config 文件中使用
httpRedirectandrewrite,我如何指定哪個規則優先?例如,假設我有一個通用的 catch all 規則,例如
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。在此範例中,因為
Rule1is first,這意味著請求將被重寫為foo.aspx?bar=special而不是foo.aspx?bar=123,即使它同時匹配Rule1、Rule2和Rule3。該
stopProcessing="true"屬性確保不執行其他匹配規則(即Rule2andRule3)。IIS 中的每個配置級別都可以定義零個或多個重寫規則。規則的評估順序與它們指定的順序相同。URL 重寫模組使用以下算法處理規則集:
- 首先,URL 與規則的模式相匹配。如果不匹配,則 URL 重寫模組立即停止處理該規則,並繼續處理下一條規則。
- 如果模式匹配並且規則沒有條件,則 URL 重寫模組執行為該規則指定的操作,然後繼續執行下一條規則,在該規則中它使用替換的 URL 作為該規則的輸入。
- 如果模式匹配並且規則存在條件,則 URL 重寫模組會評估條件。如果評估成功,則執行指定的規則動作,然後將重寫的 URL 作為後續規則的輸入