Linux

HTTP 到 HTTPS 重定向失敗

  • September 29, 2017

當我正確導航到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

您的配置似乎正確:

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 Strict Transport Security標頭。這也應該具有您的瀏覽器不會連接到您的純 http 站點並且會主動將您輸入的純 http URL 重寫為 https 的效果。
  • 不僅在您的 HTTP 站點上而且在 HTTPS 站點上也可能有多個(記憶體的)重定向和/或重寫規則處於活動狀態

有時從新的隱身/匿名瀏覽器視窗進行測試可以防止此類問題,但大多數情況下我只是從命令行進行測試,例如curl -v http://example.com/sub/directory/page.htm

引用自:https://serverfault.com/questions/876107