IIS URL重写不使用查询字符串

时间:2013-10-03 17:40:50

标签: url iis url-rewrite-module

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

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时它没有重定向。有什么想法吗?

2 个答案:

答案 0 :(得分:12)

Microsoft's documentation中所述:

  

了解URL字符串的某些部分是如何实现的非常重要   可以从重写规则访问。

     

对于此表单中的HTTP URL:   HTTP(S):// {主机}:{端口} / {路径} {查询字符串}

     

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

     

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

在您要重写为重定向的网址中,您的{host} = "www.site.com"{path} = ""{querystring} = "q=node/17"。因此,您要重定向的网址中的{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>

答案 1 :(得分:7)

当然,我发布后很快就知道了。这样做,不确定为什么完全匹配不起作用。

<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>