我认为这很简单,但它拒绝工作。旧网址是
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时它没有重定向。有什么想法吗?
答案 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>