强制Umbraco将https用于后台,http用于所有其他请求

时间:2017-06-07 20:48:23

标签: asp.net iis url-rewriting web-config umbraco

我正在尝试配置Umbraco,以便后台办公室(www.mydomain.com/umbraco)的所有请求都被重定向到https,并且所有非后台请求都被转发到http。

通过设置此Web配置应用程序密钥,我可以轻松地让后台办公室使用SSL:

<add key="umbracoUseSSL" value="false" />

然而,我正在努力让所有其他页面强制http。证书是自签名的,因此我不希望最终用户收到SSL错误。我在web.config中尝试了这个重写规则,但没有任何影响。

<rule name="No-https" enabled="true" stopProcessing="true">
   <match url=".*" negate="false" />
   <conditions>
      <add input="{HTTPS}" pattern="on" />
      <add input="{URL}" pattern="umbraco" negate="true" />
   </conditions>
   <action type="Redirect" url="http://{HTTP_HOST}{REQUEST_URI}" />
</rule>

我的目标是,对 https ://www.mydomain.com的任何请求都会重定向到 http ://www.mydomain.com,除非它与文件夹匹配/一把umbraco。

如果我有此规则,则所有http请求都会重定向到https:

<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}" redirectType="Permanent" />  
</rule>

但是当我否定这条规则时,它不再有任何影响吗?

<rule name="Redirect to HTTP" stopProcessing="true">  
   <match url="(.*)" />  
   <conditions>  
      <add input="{HTTPS}" pattern="^OFF$" negate="true" />  
   </conditions>  
   <action type="Redirect" url="http://{HTTP_HOST}/{R:1}" redirectType="Permanent" />  
</rule>

更新。看起来无法处理重定向,因为浏览器在重写规则运行之前发出了https错误? Redirect from https to http when the SSL cert is no longer valid。使用自签名证书时有没有办法重定向到http?

2 个答案:

答案 0 :(得分:0)

我建议您考虑在您的网站上使/umbraco/无效,并将其设为仅限HTTP。

然后我会设置一个不同的网站,可能是umbraco.yoursite.domain,它确实需要SSL并允许该地址访问Umbraco。

另外,您是否考虑过使用LetsEncrypt为您的网站获取正确的SSL证书?

答案 1 :(得分:0)

尝试修改你的规则只匹配Umbraco路径,如下所示:

  <rule name="Force SSL" stopProcessing="true">
    <match url="^umbraco/(.*)" />
    <conditions>
      <add input="{HTTPS}" pattern="OFF" />
    </conditions>
    <action type="Redirect" url="https://{HTTP_HOST}/{R:0}" />
  </rule>

这样,除了umbraco路径以外的任何地方的http请求都不会被重定向。对于https&gt; http请求尝试以下(未经测试)

  <rule name="Force Http" stopProcessing="true">
    <match url="(.*)" />
    <conditions>
      <add input="{HTTPS}" pattern="ON" />
      <add input="{PATH_INFO}" pattern="^umbraco/(.*)" negate="true" />
    </conditions>
    <action type="Redirect" url="http://{HTTP_HOST}/{R:0}" />
  </rule>