IIS重写规则未传递查询参数

时间:2016-04-09 13:40:30

标签: iis url-rewriting

我想我正在尝试做一些应该简单的事情。我希望有一个重写规则,从许多域中获取任何传入请求,并将其重写为/redirect.aspx?src=original URL

这就是我所拥有的

<rewrite>
  <rules>
    <rule name="SimpleURL" stopProcessing="true">
      <match url="(.*)" />
      <conditions>
        <add input="{URL}" negate="true" pattern="\.aspx$"/>
      </conditions>
      <action type="Redirect" url="/Redirect.aspx?src={R:0}" appendQueryString="true" redirectType="Permanent" />
    </rule>
  </rules>
</rewrite>

它的工作原理除了传递的查询参数是src =没有任何值。

我进行了更改,现在它正在传递查询参数

的硬编码值
I made a change so it is now passing a value for the parameter. 


<rewrite>
  <rules>
    <rule name="SimpleURL" stopProcessing="true">
      <match url="(.*)" />
      <conditions>
        <add input="{URL}" negate="true" pattern="\.aspx$"/>
        <add input="{QUERY_STRING}" pattern="src=(.*)" negate="true" />
      </conditions>
      <action type="Redirect" url="/Redirect.aspx?src=foobar" appendQueryString="true" redirectType="Found" />
    </rule>
  </rules>
</rewrite>

如果我用{R:0}替换foobar,则不会传递任何值。在此输入代码硬编码的foobar值通过。

1 个答案:

答案 0 :(得分:0)

您的规则看起来很好,并且在我的计算机上正常工作,但您使用的是永久重定向。测试时您是否对规则进行了任何更改?尝试从隐身/私密模式浏览器进行测试或测试其他网址。

请尝试以下规则:

<rule name="SimpleURL" stopProcessing="true">
  <match url="(.*)" />
  <conditions trackAllCaptures="true">
    <add input="{URL}" negate="true" pattern="\.aspx$"/>
    <add input="{QUERY_STRING}" pattern="src=(.*)" negate="true" />
    <add input="{URL}" pattern="(.*)" />
  </conditions>
  <action type="Redirect" url="/Redirect.aspx?src={C:2}" appendQueryString="true" redirectType="Found" />
</rule>