Apache-2.2

您將如何用重定向替換此重寫規則?

  • October 2, 2017

這個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_rewritemod_alias沒有能力做你需要的。

作為後續,如果您使用 Apache 2.4.19 或更高版本,您可以在 <Location> 部分中使用更簡單的重定向格式,如mod_alias 文件中所述。這種新格式使用表達式語法,允許使用變數。

例如:

&lt;VirtualHost *:80&gt;
   ServerName lvh.me
   ServerAlias *.lvh.me

   &lt;Location "/"&gt;
       Redirect "https://%{SERVER_NAME}%{REQUEST_URI}"
   &lt;/Location&gt;
&lt;/VirtualHost&gt;

請注意,只有 Redirect 指令適用於這種較短的格式,RedirectPermanent 等不適用。

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