Dot-Net

IIS 重定向規則優先級

  • January 7, 2020

如果我在我的 Web.config 文件中使用httpRedirectand rewrite,我如何指定哪個規則優先?

例如,假設我有一個通用的 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,即使它同時匹配Rule1Rule2Rule3

stopProcessing="true"屬性確保不執行其他匹配規則(即Rule2and Rule3)。

來源:http ://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference#Rules_Evaluation

IIS 中的每個配置級別都可以定義零個或多個重寫規則。規則的評估順序與它們指定的順序相同。URL 重寫模組使用以下算法處理規則集:

  1. 首先,URL 與規則的模式相匹配。如果不匹配,則 URL 重寫模組立即停止處理該規則,並繼續處理下一條規則。
  2. 如果模式匹配並且規則沒有條件,則 URL 重寫模組執行為該規則指定的操作,然後繼續執行下一條規則,在該規則中它使用替換的 URL 作為該規則的輸入。
  3. 如果模式匹配並且規則存在條件,則 URL 重寫模組會評估條件。如果評估成功,則執行指定的規則動作,然後將重寫的 URL 作為後續規則的輸入

引用自:https://stackoverflow.com/questions/18927737