I’m using these two rules in my web.config file:
<rule name="Enforce canonical hostname" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" negate="true" pattern="^www\.example\.com$" />
</conditions>
<action type="Redirect" url="https://www.example.com/{R:1}" redirectType="Permanent" />
</rule>
<rule name="HTTP to HTTPS redirect" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" />
</rule>
With these two rules I get the following Redirect to work :
- http://www.example.com —> https://www.example.com
- http://example.com—>https://www.example.com
- https://example.com —> this fails to redirect to https://www.example.com … Why?
Not sure if you’re still seeking an answer but here goes. After some searching, and trial and error, I found success with the following rules. Most examples I’ve encountered are unnecessarily complex with regards to pattern matching and introduce other variables that prevent the rules from working as intended. The rules below can be applied to any website, and nothing is hard-coded so it should always be a straight copy-and-paste job:
Two things to note: redirectType=”Permanent” will will result in the rule being applied until the browser’s history / cache are emptied; this should be a good thing as the browser would do the work going forward. Also, appendQueryString=”false” is necessary as the {HTTP_URL} server variable already includes the full querystring; by default the option is “true” and would result in duplicate querystrings here.