如何使用 ssl Apache 将 www.subdomain 重定向到子域

How to redirect www.subdomain to subdomain with ssl Apache

我想将 http://www.subdomain.domain.com/ 重定向到 https://subdomain.domain.com

首先我要向你解释我有什么,然后我做了什么,以及发生了什么。

这是我的:

我在 tomcat 上有一个 运行 的 Web 应用程序,我使用 Apache2 作为该应用程序的代理。

我有一个域,我们称它为 mydomain.com,Web 应用程序的主要 url 是 suba.mydomain.commydomain.comwww.mydomain.com 已被使用另一件事)。我还有 *.mydomain.com 的 SSL 通配符。

但我希望发生这种情况:

这是我试过的:

我尝试将 http://www.suba.mydomain.com 重定向 301 到 https://suba.mydomain.com 并进行重写(不能同时进行)。

结果

当我键入 www.suba.mydomain.com 时,我已成功重定向到 https://suba.mydomain.com,但是当我尝试在同一网络浏览器中再次执行此操作时,它会显示如下错误:

这是因为网络浏览器试图添加 https:// 并尝试加载 *.mydomain.com SSL 通配符,所以它不会有效。

所以在 Google Chrome 中,如果我转到 chrome://net-internals/#hsts 并删除 suba.mydomain.comwww.suba.mydomain.com 并再次尝试输入 www.suba.mydomain.com 我再次成功重定向到 https://suba.mydomain.com,但如果我再次尝试这样做,它不会工作。

我能做什么?谢谢!

根据您的描述,您的站点 suba.mydomain.com 似乎正在发送 HTTP Strict-Transport-Security 响应 header 和 includeSubDomains 指令。这会导致您的浏览器在您随后访问 http://www.suba.mydomain.com 时执行到站点的 https:// 版本的内部重定向,并且您的 Apache 重写规则不会启动,直到与服务器建立连接(这需要SSL 握手即将完成)。

如果您确实使用 includeSubDomains 发送 HSTS header,看看删除它是否有帮助。

这是我怀疑正在发生的事情:

  1. 您访问http://www.suba.mydomain.com,您的重写规则在 Apache 将您重定向到 https://suba.mydomain.com.
  2. https://suba.mydomain.com 正在发送 HSTS header,很可能 includeSubDomains,表示未来所有通过不安全方式向 [*.]suba.mydomain.com 发出的请求 http:// 可以通过浏览器升级到 https://
  3. 当您再次访问 http://www.suba.mydomain.com 时,由于缓存的 HSTS 设置,浏览器会将您重定向到 https://www.suba.mydomain.com
  4. 您看到此错误是因为 https://www.suba.mydomain.com 与您对 *.mydomain.com 有效的证书不匹配。在建立连接之前,您的 Apache 重写规则不会 运行,这意味着接受证书警告。
  5. 像您所做的那样从 Chrome 的缓存中删除 HSTS 条目将清除记录,并且您可以在 运行 进入相同的之前访问 http://www.suba.mydomain.com 一次而没有警告问题。