我正在尝试制定一个 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 中已经存在的部分。
答案1
这应该可以解决问题:
<rule name="Add hssc param" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{QUERY_STRING}" pattern="hssc=1" negate="true" />
<add input="&{QUERY_STRING}" pattern="^(&.+)|^&$" />
</conditions>
<action type="Redirect" url="http://{HTTP_HOST}/{R:0}?hssc=1{C:1}" appendQueryString="false" />
</rule>
这将始终将 hssc=1 添加到查询字符串的开头,同时保留查询字符串的其余部分。它适用于您的所有示例。我将其添加到前面而不是附加,但我认为最终结果是相同的。