I had a standard website hosted on a server I have full control over - www.domain.com. I recently purchased an SSL certificate for this domain in preparation for accepting credit cards and am looking to have all requests redirect to https://www.domain.com. For the most part, the rule I created (see below) works fine - if I type in http://www.domain.com it'll redirect to https://www.domain.com. The problem I have is if I go to an inner link, such as http://www.domain.com/folder/page.aspx, I get a 404 because the only binding ties to HTTPS. How can I make a redirect rule that says any request for www.domain.com gets sent to HTTPS, but retain the original folder/page structure that was requested? So, going to http://www.domain.com/folder/page.aspx sends me to https://www.domain.com/folder/page.aspx. I'd prefer if query string values also stayed intact.
Here is my current rewrite rule:
<rewrite>
<rules>
<rule name="Redirect to HTTPS" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" />
</rule>
</rules>
</rewrite>
I ended up solving it on my own - I did a combination of two different rules (one to rewrite http://domain.com to https://www.domain.com where the cert is linked to) and another to just redirect all HTTPS requests and it seems to be working perfectly. Here is the relevant config entry:
I know that you can take the entire URL with you if you configure redirects within IIS, if you use the attribute appendUrlTrail="true". Maybe you could append it to the Tag. I'm not sure whether it is working or not :-)