【问题标题】:IIS URL Rewrite To Capture Query StringsIIS URL 重写以捕获查询字符串
【发布时间】:2014-07-20 23:25:06
【问题描述】:

我正在尝试将http://example.com/auth/recover?u=123&t=456 重定向到http://example.com/#!/passwordreset/123/456

我的 URL 配置看起来像。

      <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:http://example.com/#!/resetpassword/u=123/123

如果我交换条件,我会发生类似的事情(我在 URL 中得到一个 t=456)。

【问题讨论】:

    标签: iis url-rewriting rewrite url-rewrite-module


    【解决方案1】:

    我找到了它不起作用的原因以及解决方法,所以我将在这里回答我自己的答案。

    似乎在 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>
    

    所以它匹配我想要的第一个条件,然后将它与我的第二个参数一起传递给下一个条件以再次“重新匹配”。不是那么优雅,但它确实有效!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-20
      • 2011-09-22
      • 1970-01-01
      • 2021-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多