13

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

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

4

2 回答 2

24

Microsoft 文档中所述:

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

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

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

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

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

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

<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>
于 2014-10-30T09:22:23.997 回答
9

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

<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>
于 2013-10-03T17:53:10.173 回答