Mod-Rewrite

使用 modrewrite 將 http 更改為 https(不重定向)

  • September 27, 2019

我有一個包含文件,可以說inc-navigation.html,它在每一頁都有絕對路徑(http://www.pathtoimage.com/image.com)。好吧,使用 SSL,我不能使用相同的包含文件,因為它沒有引用https:// 多麼痛苦!

所以,當瀏覽器請求 https 頁面時,我可能正在考慮使用 htaccess 對所有 HTTP 到 HTTPS 的引用進行 url 重寫。同樣,為了清楚起見,我不想“重定向”,只是“替換”。

所以,我有這個:

RewriteCond %{HTTPS} !=on 
RewriteRule ^http$ https

但這似乎不起作用。這種事情甚至可能嗎?

HTTPS 是基於 SSL/TLS 的 HTTP,它保護了傳輸層,即瀏覽器和 Web 伺服器之間的通信。

mod_rewrite通過重定向在內部或外部重寫請求,但僅在瀏覽器發送請求後,在您的情況下為時已晚。

如果您想通過 HTTPS 連接使用通常託管在純 HTTP 上的內容,您可以設置從 HTTPS 主機到純 HTTP 主機的反向代理。mod_proxy_http,預設情況下與 Apache 2.x 捆綁在一起,將能夠Location在重定向中重寫標頭,但不能重寫頁面本身(及其連結)的內容。為此,您可能需要查看mod_proxy_html,它應該能夠重寫頁面本身的連結。

話雖如此,在您的inc-navigation.html文件中包含絕對連結聽起來像是一個設計錯誤,執行搜尋/替換以擺脫該文件中的這些絕對連結可能比設置mod_proxy_html.

如果您使用的某些絕對連結指向其他主機,您可以使用網路路徑相對引用(以 開頭//,從而使方案相對)。當然,這只有在這些主機啟用了 HTTPS 時才有效。

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