Apache-2.2

預設情況下,如何通過 HTTPS 使 Apache 的 mod_rewrite 重定向?

  • January 22, 2016

假設我有一個可通過 HTTPS 訪問的網站,例如https://example.com/foo. 考慮以下內容.htaccess

RewriteBase /
RewriteEngine On
RewriteRule ^foo$ bar [R=301,L]

現在,當我訪問 時,它會通過 HTTP 而不是 HTTPShttps://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,以防止無用的硬碟訪問。

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