【问题标题】:IIS URL Rewrite not working with query stringIIS URL 重写不适用于查询字符串
【发布时间】:2013-10-10 12:49:15
【问题描述】:

我认为这很简单,但它拒绝工作。旧网址是

http://www.site.com/?q=node/17

它需要重定向到http://www.site.com。我不需要担心通配符,这是我唯一需要担心的查询字符串参数。我写的规则看起来像

<rule name="Node17" patternSyntax="ExactMatch" stopProcessing="true">
    <match url="http://www.site.com/?q=node/17" />
    <action type="Redirect" url="http://www.site.com" appendQueryString="False" />
</rule>

我可以测试 IIS 内部的模式并且它匹配,但是当我在浏览器中点击 URL 时它不会重定向。有什么想法吗?

【问题讨论】:

    标签: url iis url-rewrite-module


    【解决方案1】:

    Microsoft's documentation中所述:

    了解 URL 字符串的某些部分如何处理非常重要 从重写规则访问。

    对于这种形式的 HTTP URL: http(s)://{host}:{port}/{path}?{querystring}

    {path} 与规则的模式相匹配。这 {querystring} 在名为 QUERY_STRING 的服务器变量中可用 并且可以通过使用规则中的条件来访问。

    规则条件允许为规则评估定义额外的逻辑... 在规则模式匹配成功后评估规则条件。

    在您想要重写为重定向的 URL 中,您的 {host} = "www.site.com"{path} = ""{querystring} = "q=node/17"。因此,您要重定向的 URL 中的 {path} 部分实际上是空的,并且您在问题中使用的规则与之匹配但不匹配。

    您的解决方案确实有效,所以我将在此处引用它:

    <rule name="Node17" stopProcessing="true">
        <match url=".*" />
    <conditions>
        <add input="{QUERY_STRING}" pattern="q=node/17" />
    </conditions>
    <action type="Redirect" url="http://www.example.com" appendQueryString="False" />
    </rule>
    

    【讨论】:

      【解决方案2】:

      当然,我在发布后不久就想通了。这样做了,但不确定为什么完全匹配不起作用。

      <rule name="Node17" stopProcessing="true">
          <match url=".*" />
      <conditions>
          <add input="{QUERY_STRING}" pattern="q=node/17" />
      </conditions>
      <action type="Redirect" url="http://www.site.com" appendQueryString="False" />
      </rule>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-04
        • 1970-01-01
        • 2012-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多