Linux
在沒有 DNS 或靜態 IP 的情況下將 HTTP 重定向到 HTTPS
我過去設置過 Web 伺服器,但現在我正在研究一個有點不同的嵌入式 Linux 項目。我需要嵌入式 Linux 設備
- 執行 Apache 伺服器
- 支持DHCP
- 不需要任何 DNS 設置
- (需要基本上是即插即用和白痴證明)。
我有點不確定如何進行 HTTP 到 HTTPS 的重定向。困難的是我不知道 DNS 或 IP。mod-rewrite 有沒有辦法像這樣動態檢測目前 IP 並重定向到 HTTP:
RewriteRule ^(.*)$ https://[(currentDHCPIPAddress)/$1 [L,R=301]
大部分流量將來自內部 LAN,所以我不能做某種防火牆魔法。
如果其他人有任何想法來實現這一點,我很想听聽建議。它與您想要設置大多數伺服器的方式有點不同,所以它暫時難住了我,大多數文件並沒有為這種案例做好準備。
這是一個簡單的重定向,所以讓我們首先避免使用 mod_rewrite並改用mod_alias
Redirect
。如果該
Redirect
指令在<Location>
or<LocationMatch>
部分中使用而省略了 URL 路徑 ,則 URL 參數將使用 表達式語法進行解釋。使用表達式語法,您可以使用變數,並
%{HTTP_HOST}
包含Host:
標題中的任何內容,即瀏覽器地址欄上的主機名,無論是 DNS 名稱還是 IP 地址。這正是你要找的。讓我們把它放在一起。您的預設(第一個或唯一)基於名稱的虛擬主機可能具有:
NameVirtualHost *:80 <VirtualHost *:80> <Location "/"> Redirect "https://%{HTTP_HOST}%{REQUEST_URI}" </Location> </VirtualHost>
這將使埠 80 上的任何 HTTP 請求重定向到其 HTTPS 等效項,除非有一個匹配的基於名稱的虛擬主機配置不同。