我有两个具有 SSL 证书的主要链接,
www.example.com
billing.example.com
我想强制用户在这两个链接上都使用 SSL,
https
://www.example.com https://billing.example .com
我正在使用 WHMCS,当我将其放入设置中以使用 billing.example.com 时,它就像在 www.example.com 上一样
我用 .htaccess 尝试了一些不同的东西,但都没有奏效。
我有两个具有 SSL 证书的主要链接,
www.example.com
billing.example.com
我想强制用户在这两个链接上都使用 SSL,
https
://www.example.com https://billing.example .com
我正在使用 WHMCS,当我将其放入设置中以使用 billing.example.com 时,它就像在 www.example.com 上一样
我用 .htaccess 尝试了一些不同的东西,但都没有奏效。
您可以将以下指令添加到您的 Apache 虚拟主机配置中。
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
这将始终重定向到 HTTPS 主机。
命名虚拟主机不适用于 HTTPS,因为服务器在建立连接之前无法解释 Host 标头,并且建立连接需要完成 HTTPS 使用的 SSL 加密握手;SSL 证书(不带扩展名)只能将单个服务器主机名作为其主题,因此证书和连接仅适用于单个主机名。结果,命名的虚拟主机机制永远没有机会对传入连接进行操作,并且托管多个站点的唯一剩余方法是向主机添加多个 IP 地址并使用基于 IP 的虚拟服务器。
使用 HTTPS 和基于名称的虚拟主机支持多个站点的关键是使用通配符名称(在 RFC2818 中指定)或 x509 版本 3 证书(在 RFC3280 中指定)主题备用名称扩展。
作为替代方案,您可以将您的站点(www. 和 billing. 绑定到同一主机上的不同 IP 地址)。
如果您不想使用 .htaccess,也可以使用 apache 的 httpd.conf 中的虚拟主机来完成。(以下假设您在端口 80 上运行 http,在 443 上运行 https)
<VirtualHost *:80>
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L]
</VirtualHost>
<VirtualHost *:443>
... some config
</VirtualHost>