HTTP 到 HTTPS 重定向失败

HTTP 到 HTTPS 重定向失败

当我导航到http://example.com它时,它会正确重定向到https://example.com

我遇到的问题是,当我导航到http://example.com/sub/directory/page.htm它时它会重定向到https://example.comsub/directory/page.htm

为什么它没有重定向到https://example.com/sub/directory/page.htm

这是 Apache 配置:

<VirtualHost *:80>
        ServerName example.com

        Redirect permanent / https://example.com/

</VirtualHost>

<IfModule mod_ssl.c>

#NameVirtualHost *:443

<VirtualHost *:443>

        ServerName example.com

        [...]

        ProxyRequests Off
        ProxyPass               /          http://localhost:8444/
        ProxyPassReverse        /          http://localhost:8444/

</VirtualHost>

我使用的 Apache 版本:

Server version: Apache/2.4.18 (Ubuntu)
Server built:   2017-09-18T15:09:02

答案1

您的配置似乎正确:

Redirect permanent / https://example.com/

Redirect指令应将 URL 路径后面的所有内容逐字逐句地附加到目标。请求http://example.com/sub/directory/page.htm确实应该附加 sub/directory/page.htmhttps://example.com/ 并重定向到https://example.com/sub/directory/page.htm

您的评论“当我导航至”似乎表明您正在通过网络浏览器进行测试。

这会带来一些与使用现代浏览器相关的潜在问题:

  • 浏览器缓存永久重定向因此,您在 Apache 配置中所做的任何更改都不会被采纳,您的网络浏览器将直接转到缓存的目标 URL,而无需先连接到您的网络服务器。
  • 大多数支持 TLS 并从 http 重定向到 https 的网站也设置了HTTP 严格传输安全标头。这也会导致您的浏览器不会连接到纯 http 站点,并且会主动将您输入的纯 http URL 重写为 https。
  • 不仅在您的 HTTP 网站上,而且在 HTTPS 网站上也可能存在多个(缓存的)重定向和/或重写规则

有时从新的隐身/匿名浏览器窗口进行测试可以避免此类问题,但大多数情况下我只是从命令行进行测试,例如curl -v http://example.com/sub/directory/page.htm

相关内容