IIS重定向规则优先

问题描述:

如果我在我的Web.config文件中使用httpRedirectrewrite,如何指定哪个规则优先?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,即使它同时匹配Rule1Rule2,和Rule3

stopProcessing="true"属性确保不执行其他匹配规则(即Rule2Rule3)。

来源: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作为输入到后续的规则
+0

你能在web.config文件的上下文解释一下吗?我对gui一无所知。 – tau

+1

@tau我已经更新了我的答案。 – Dai

+0

非常感谢你!我会尽快尝试。 – tau