[英]IIS redirect rule priority
如果我在我的 Web.config 文件中使用httpRedirect
並rewrite
,我如何指定哪個規則優先?
例如,假設我有一個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
)。
來源: http : //www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference#Rules_Evaluation
IIS 中的每個配置級別都可以定義零個或多個重寫規則。 規則按照指定它們的相同順序進行評估。 URL 重寫模塊使用以下算法處理規則集:
- 首先,將 URL 與規則模式進行匹配。 如果不匹配,URL 重寫模塊會立即停止處理該規則,並繼續執行下一條規則。
- 如果模式匹配並且規則沒有條件,則 URL 重寫模塊執行為此規則指定的操作,然后繼續執行下一個規則,在該規則中使用替換的 URL 作為該規則的輸入。
- 如果模式匹配並且規則有條件,則 URL 重寫模塊會評估條件。 如果評估成功,則執行指定的規則動作,然后將重寫后的URL作為后續規則的輸入
這救了我的培根:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.