IIS重写规则检查查询string,并添加它,如果它不存在

我正在尝试制作一个IIS URL重写规则,将URL参数附加到URL。 url参数是hssc 。 所以,任何通过服务器处理的url都需要这个参数。 请记住,有些url已经有自己的参数了,其他url不会,还有根url等等,有时需要添加?hssc=1或者&hssc= – 所以,如果我的url是这样:

  • http://www.blah.com应该成为http://www.blah.com/?hssc=1
  • http://www.blah.com/index.html应成为http://www.blah.com/index.html?hssc=1
  • http://www.blah.com/?q=5应成为http://www.blah.com/q=5&hssc=1
  • http://www.blah.com/index.html?q=5应成为http://www.blah.com/index.html?q=5&hssc=1
  • http://www.blah.com/index.html?q=5&hssc=1应该单独留下

我也希望它的URL不应该被隐藏(如在后台在后台重写)。 我需要URL出现在URL中,所以当用户复制URL或书签时,参数就在那里。

我已经设置了匹配它的条件\&hssc|\?hssc – 现在我只需要一种方法来编写URL,这样它就会出现并保留已经存在的原始URL的一部分。

这应该做的伎俩:

 <rule name="Add hssc param" stopProcessing="true"> <match url=".*" /> <conditions> <add input="{QUERY_STRING}" pattern="hssc=1" negate="true" /> <add input="&amp;{QUERY_STRING}" pattern="^(&amp;.+)|^&amp;$" /> </conditions> <action type="Redirect" url="http://{HTTP_HOST}/{R:0}?hssc=1{C:1}" appendQueryString="false" /> </rule> 

这将始终将hssc = 1添加到查询string的开头,同时保留查询string的其余部分。 它适用于你所有的例子。 我把它预先而不是附加,但我认为这是相同的最终结果。