我正在尝试将http://example.com/auth/recover?u=123&t=456重定向到http://example.com/#!/passwordreset/123/456
我的网址配置如下。
<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>
不幸的是,当重写发生时,我最终得到的网址如下:http://example.com/#!/resetpassword/u=123/123
如果我交换条件,我会发生类似的事情(我在URL中得到t = 456)。
答案 0 :(得分:0)
我发现它不起作用的原因,以及解决方法,所以我将在这里回答我自己的答案。
似乎在IIS重写时使用条件时,只有LAST条件会传递给重定向操作。似乎{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>
所以它匹配我想要的第一个条件,然后将它传递给下一个条件,以便重新匹配&#34;再次与我的第二个参数。不是那么优雅,但它有效!