預設情況下,如何通過 HTTPS 使 Apache 的 mod_rewrite 重定向?
假設我有一個可通過 HTTPS 訪問的網站,例如
https://example.com/foo
. 考慮以下內容.htaccess
:RewriteBase / RewriteEngine On RewriteRule ^foo$ bar [R=301,L]
現在,當我訪問 時,它會通過 HTTP 而不是 HTTPS
https://example.com/foo
重定向到。http://example.com/bar
RewriteRule
除了為每個帶有R
標誌的人使用完整的方案+主機之外,我怎樣才能讓它進入 HTTPS ?也就是說,這將做我所追求的:RewriteBase / RewriteEngine On RewriteRule ^foo$ https://example.com/bar [R=301,L]
但是,我的
.htaccess
文件包含很多這樣RewriteRule
的s,感覺應該有一種方法告訴Apache/mod_rewrite“https://
預設重寫”。我真正想要的是一個指令告訴 Apache 該站點正在使用 HTTPS,類似於如何通過ServerName foo.ext
. 那可能嗎?我想這是 Stack Overflow 上的一個類似問題:How to convince Apache of the original client protocol
ServerName
也接受一個方案,例如ServerName https://example.com
. 在配置中更改它並重新啟動 Apache 就可以了。從文件中:
有時,伺服器在處理 SSL 的設備後面執行,例如反向代理、負載平衡器或 SSL 解除安裝設備。在這種情況下,請
https://
在指令中指定客戶端連接的方案和埠號,ServerName
以確保伺服器生成正確的自引用 URL。
這是一種方法:
RewriteEngine On #redirect all your http trafic to https exept /foo & /bar RewriteCond %{HTTP_HOST} ^example.com RewriteCond %{HTTPS} !=on RewriteCond %{REQUEST_URI} !(/foo|/bar) RewriteRule (.*) https://example.com$1 [R=301,L] #redirect /foo trafic to /bar RewriteCond %{HTTP_HOST} ^example.com RewriteCond %{REQUEST_URI} /foo RewriteRule /foo(.*) http://example.com/bar$1 [R=301,L]
將其放入您的 httpd.conf 或所有虛擬主機之前,它將應用於以 example.com 開頭的所有請求(www.example.com 不會被重定向)
要將規則應用於所有域,您可以刪除該行
RewriteCond %{HTTP_HOST} ^example.com
有關資訊,您應該盡可能避免使用 .htaccess,以防止無用的硬碟訪問。