【问题标题】:Force Umbraco to use https for back office and http for all other requests强制 Umbraco 对后台使用 https,对所有其他请求使用 http
【发布时间】:2017-06-07 20:48:23
【问题描述】:

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

我可以通过设置这个 web config appsetting 密钥轻松让后台使用 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 吗?

【问题讨论】:

  • 在用户看到证书警告之前,无法从 HTTPS 重定向到 HTTP。这在您发布的 SO 链接中进行了说明。

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


【解决方案1】:

尝试修改您的规则以仅匹配 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 > 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>

【讨论】:

  • 答案更新为您的第二个请求的潜在解决方案
【解决方案2】:

我建议您考虑让 /umbraco/ 在您的网站上不可用,并将其设置为仅 HTTP。

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

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

【讨论】:

    猜你喜欢
    • 2011-03-19
    • 2014-01-22
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 2011-02-15
    • 2014-03-14
    相关资源
    最近更新 更多