我的网站有 SSL 证书(示例网址:https://subdomain.example.com)。在 Apache 下,它同时设置了端口 80 和端口 443。因此,在以下配置下,任何人访问http://subdomain.example.com发送至https://subdomain.example.com。但对于来自 Internet Explorer 的访问,不会发生重定向。相反,http 访问会收到“Internet Explorer 无法显示网页。”以及要尝试的客户端解决方案列表。
关于如何修复配置,以便 IE 访问具有与其他浏览器相同的行为(即自动将 http 发送到 https),有什么想法吗?
NameVirtualHost *:443
<VirtualHost *:80>
DocumentRoot /var/www/somewebroot
ServerName subdomain.example.com
</VirtualHost>
<VirtualHost *:443>
DocumentRoot /var/www/somewebroot
ServerName subdomain.example.com
# SSL CERTS HERE
</VirtualHost>
*测试了 IE8、IE9 测试版
答案1
将此代码放在 HTTP 虚拟主机的定义中就可以了。
RewriteCond %{HTTPS} !=on [NC] 重写规则 ^/(.*) https://subdomain.example.com [R=301,L]
如果您正在测试更改,则可能会遇到 IE 问题,除非您关闭所有 IE 窗口并重新启动。IE 可能会积极使用其缓存。
编辑:您需要确保 mod_rewrite 已启用。命令是a2enmod rewrite
。它会告诉您模块是否已启用。如果没有,您需要在启用模块后关闭并重新启动服务器。
将上面的几行添加到您的虚拟主机定义中,并用于apache2ctl graceful
重新加载修改后的配置。Apache 文档有关于重写的详细信息。
您应该会在访问日志中看到重定向为 301 状态请求,随后 HTTPS 连接上会出现 200 或 304 状态。显示的 URL 应更改为新位置。
以扩展日志格式记录端口有助于查看哪些连接上正在发生事件。或者,为每个虚拟服务器使用单独的日志。