我在 Apache Web 服务器上托管了多个网站。
站点 A 是 HTTPS,站点 B 是 HTTP。
当人们使用 HTTPS 访问网站 B 时(我不知道他们为什么这样做,因为网站 B 上没有 HTTPS,而且从来没有过,但他们确实访问了),他们会被定向到网站 A。我该如何解决这个问题并让他们留在网站 B 上?
答案1
不幸的是,在用户到达您的 Web 服务器(在 DNS 或其他方式中)之前没有办法捕获此问题。创建一个虚拟主机来处理 SITEB 的 https 请求并将其重定向到 http。
您也可以使用 SITEA https 虚拟主机中的 rewritecond/rewriterule 执行相同的操作。
本质上是下列内容的逆过程:http://wiki.apache.org/httpd/RedirectSSL
答案2
发生这种情况是因为您的两个域名都由同一个 httpd 进程提供服务。在您的服务器/虚拟主机配置中,特定于监听端口 443 的配置部分仅适用于 SITEA。
用户访问 SITEB 的 https 可能是因为 httpseverywhere(或同等)浏览器插件将他们重定向到 https 版本的网站。现在,当他们访问时https://site-b.com
,apache 服务器(因为 SITEB 指向您机器的 IP)会查找有关端口 443 的配置;并开始提供 SITEA 页面。
我建议你开始通过 HTTPS 为你的客户提供你的网站服务(letsencryptFTW),而不是从 https 重定向到 http。或者,您可以在 Apache 的 SITEA Vhost 配置中添加以下规则集:
RewriteEngine On
RewriteCond %{HTTP_HOST} SITEB [NC]
RewriteRule ^ http://SITEB%{REQUEST_URI} [R=301,L]