Internet Explorer 客户端访问的 Http 到 https 行为

Internet Explorer 客户端访问的 Http 到 https 行为

我的网站有 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 应更改为新位置。

以扩展日志格式记录端口有助于查看哪些连接上正在发生事件。或者,为每个虚拟服务器使用单独的日志。

相关内容