【问题标题】: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>