3

I'm trying to make a IIS URL rewrite rule that appends an URL parameter to the URL. The url parameter is hssc. So, any url that is processed through the server, needs that parameter. Keeping in mind that some urls will have their own params already, and other urls won't, and root urls, etc, sometimes it will need to add ?hssc=1 or &hssc= - so, if I have a URL that is as such:

I also want it that the URL should not be hidden (as in a backend rewrite behind the scenes). I need the URL to appear in the URL, so when users copy the URL, or bookmark it, the parameter is there.

I've set the condition to match it \&hssc|\?hssc - now I just need a way to write the URL, so it appears and keeps the part of the original URL that is already there.

M.R.
  • 143
  • 1
  • 8

1 Answers1

2

This should do the trick:

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

That will always prepend the hssc=1 to the beginning of the querystring while preserving the rest of the querystring. It works for all of your examples. I had it prepend rather than append but I assume that it's the same end result.

Scott Forsyth
  • 16,339
  • 3
  • 36
  • 55
  • 1
    Your solution works with all his examples but wouldn't `url="{R:0}?hssc=1{C:1}"` be better as it guards against future changes of protocol and host name? – Jamie Kitson Apr 07 '16 at 13:56
  • @JamieKitson Yes, you're absolutely right. No need to have the protocol and host, in fact it's better not to. The will will be preserved but the protocol won't. – Scott Forsyth Apr 16 '16 at 16:17