Rewrite rule to HTTPS except when on localhost

匿名 (未验证) 提交于 2019-12-03 02:47:02

问题:

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?

回答1:

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.



回答2:

Adding to anubhava's answer, you can replace the add element for localhost with the following 2 entries to cater for both localhost and 127.0.0.1 with optional ports e.g localhost:59400 which is the case when debugging through visual studio and IIS

<add input="{HTTP_HOST}" matchType="Pattern" pattern="^localhost(:\d+)?$" negate="true" /> <add input="{HTTP_HOST}" matchType="Pattern" pattern="^127\.0\.0\.1(:\d+)?$" negate="true" />     

With the original answer, localhost:123 would be redirected to https which may not be desirable.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!