Apache-2.2
使用 AWS 彈性負載均衡器強制 HTTPS
我需要在我的彈性負載均衡器上將所有傳入的 HTTP 流量重定向到 HTTPS。
我厭倦了使用 Apache mod_rewrite:
RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule !/status https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
利用負載均衡器添加的 X-Forwarded-Proto 標頭,此規則應指示使用者瀏覽器請求相同 URL 的 HTTPS 版本。
到目前為止它不起作用(沒有重定向發生)。
我究竟做錯了什麼?
有一個更好的方法嗎?
編輯:
這最終奏效了:
RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} !=https RewriteRule ^/(.*)$ https://%{SERVER_NAME}/$1 [R=301,L]
因此,我假設您將 ELB 設置為接受 HTTP/80 和 HTTPS/443 上的流量,但將所有埠轉發到 HTTP。
如果你想使用你的方法(這很聰明),你確定你得到的不是
%{X-Forwarded-Proto}
-HTTP:
前綴對我來說看起來很奇怪。除此之外,這對我來說是正確的。如果這是在虛擬主機或主伺服器配置中並且仍然無法正常工作,您可以添加
RewriteLog rewrite-log RewriteLogLevel 3
然後查看文件
rewrite-log
以了解實際情況。這個文件可能非常冗長,從較低級別開始。無法從.htaccess
文件啟動日誌記錄。(我建議您在其上設置標誌,
RewriteRule
[R=301,L]
這將導致伺服器發回 301 響應,這會告訴搜尋引擎考慮永久重定向,並相應地更新其連結。)