Linux
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
您的配置似乎正確:
Redirect permanent / https://example.com/
該
Redirect
指令應將 URL 路徑之後的所有內容逐字附加到目標。請求http://example.com/sub/directory/page.htm
確實應該附加sub/directory/page.htm
到https://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