Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rewrite rule to HTTPS except when on localhost

I am using the answer given here as the basis for trying to add a rewrite rule to my web.config file. I want it to match any url that is not running on localhost in order to force https.

Here is what I have right now:

<system.webServer>   <rewrite> <!-- force https - https://stackoverflow.com/a/15119044/51 -->     <rules>       <rule name="Redirect HTTP to HTTPS" stopProcessing="true">         <match url="^((?!localhost).)*$"/>         <conditions>           <add input="{HTTPS}" pattern="^OFF$"/>         </conditions>         <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="SeeOther"/>       </rule>     </rules>   </rewrite> </system.webServer> 

I am trying to use a negative lookaround in order to only match url's that do not include "localhost" within the url. But this is not working.

So how should this rule be set up in order to only rewrite non-localhost url's?

like image 347
Yaakov Ellis Avatar asked Jan 06 '14 10:01

Yaakov Ellis


People also ask

What is a URL rewrite rule?

A rewrite rule defines the logic of what to compare or match the request URL with, and what to do if the comparison is successful. Rewrite rules consists of the following parts: Pattern – The rule pattern is used to specify either the regular expression or a wildcard pattern that is used to match URL strings.

Where are IIS rewrite rules stored?

When done on the server level it is saved in the ApplicationHost. config file. You can also define it on the folder level, it that case it is saved in a web. config file inside that folder.


1 Answers

Try this condition:

<system.webServer>   <rewrite>     <rules>       <rule name="Redirect HTTP to HTTPS" stopProcessing="true">         <match url="^(.*)$"/>         <conditions>           <add input="{HTTPS}" pattern="^OFF$"/>           <add input="{HTTP_HOST}" matchType="Pattern" pattern="^localhost$" negate="true" />          </conditions>         <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="SeeOther"/>       </rule>     </rules>   </rewrite> </system.webServer> 

Using a negate condition against the localhost pattern should do the trick.

like image 61
anubhava Avatar answered Sep 20 '22 08:09

anubhava