IIS URL重写以捕获查询字符串
我正在尝试重定向到 我的URL配置看起来像IIS URL重写以捕获查询字符串,iis,url-rewriting,rewrite,url-rewrite-module,Iis,Url Rewriting,Rewrite,Url Rewrite Module,我正在尝试重定向到 我的URL配置看起来像 <rewrite> <rules> <rule name="Redirect Forgotten Password" stopProcessing="true"> <match url="^auth/recover" /> <conditions> <add inp
<rewrite>
<rules>
<rule name="Redirect Forgotten Password" stopProcessing="true">
<match url="^auth/recover" />
<conditions>
<add input="{QUERY_STRING}" pattern="u=([0-9]+)" />
<add input="{QUERY_STRING}" pattern="t=([0-9]+)" />
</conditions>
<action type="Redirect" url="/#!/resetpassword/{C:0}/{C:1}" appendQueryString="false" />
</rule>
</rules>
</rewrite>
如果我交换条件,我会看到类似的事情发生(我在URL中得到一个t=456) 我已经找到了它不起作用的原因,以及解决它的方法,所以我将在这里回答我自己的答案
在IIS重写中使用条件时,似乎只会将最后一个条件传递给重定向操作。看起来{C:0}将匹配整个条件,然后后面的索引就是该条件中的匹配表达式
一种方法是在一个批次中创建一个与查询字符串匹配的条件。但这意味着每次查询字符串中的参数的顺序都必须相同
相反,我做了以下工作:
<rewrite>
<rules>
<rule name="Redirect Forgotten Password" stopProcessing="true">
<match url="^auth/recover" />
<conditions>
<add input="{QUERY_STRING}" pattern="u=([0-9]+)" />
<add input="##{C:1}##_{QUERY_STRING}" pattern="##([^#]+)##_.*t=([0-9]+)" />
</conditions>
<action type="Redirect" url="/#!/resetpassword/{C:1}/{C:2}" appendQueryString="false" />
</rule>
</rules>
</rewrite>
因此,它匹配我想要的第一个条件,然后将其传递到下一个条件,与我的第二个参数一起再次“重新匹配”。没有那么优雅,但它很管用