Apache-2.2
您將如何用重定向替換此重寫規則?
這個Apache 參考頁面和這個wiki 明確指出,要實現簡單的 http 到 https 重定向,
mod_alias
應該使用而不是更昂貴的mod_rewrite
.我有一個 Apache 虛擬主機,它使用萬用字元匹配多個子域。我需要將所有這些子域重定向到它們相應的 https 對應項。目前,我正在使用以下(使用 mod_rewrite):
<VirtualHost *:80> ServerName lvh.me ServerAlias *.lvh.me RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L] </VirtualHost>
我嘗試了以下方法,但沒有奏效。
<VirtualHost *:80> ServerName lvh.me ServerAlias *.lvh.me Redirect temp / https://%{HTTP_HOST}/ </VirtualHost>
HTTP_HOST
重定向指令中似乎無法辨識apache 變數。那麼,有沒有其他方法可以使用 mod_alias 來達到上述效果呢?
你不能。
Redirect
能夠處理簡單的重定向,您將客戶端發送到單個特定名稱,但無法進行複雜的替換(拋開 - 特定的事實%{HTTP_HOST}
)mod_rewrite
。堅持下去
mod_rewrite
。mod_alias
沒有能力做你需要的。
作為後續,如果您使用 Apache 2.4.19 或更高版本,您可以在 <Location> 部分中使用更簡單的重定向格式,如mod_alias 文件中所述。這種新格式使用表達式語法,允許使用變數。
例如:
<VirtualHost *:80> ServerName lvh.me ServerAlias *.lvh.me <Location "/"> Redirect "https://%{SERVER_NAME}%{REQUEST_URI}" </Location> </VirtualHost>
請注意,只有 Redirect 指令適用於這種較短的格式,RedirectPermanent 等不適用。