你将如何用redirect来replace这个重写规则?

这个 Apache参考页面和这个 wiki明确指出,为了实现简单的http到httpsredirect,应该使用mod_alias而不是更昂贵的mod_rewrite

我有一个使用通配符匹配多个子域的Apache虚拟主机。 我需要所有这些子域名redirect到他们相应的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> 

apachevariablesHTTP_HOST在redirect指令中似乎不被识别。

那么,有没有其他方法可以使用mod_alias来达到上述效果呢?

你不能。 Redirect能够处理简单的redirect,在那里你发送客户端到一个单一的,特定的名称,但没有能力做复杂的替代(抛开%{HTTP_HOST}mod_rewrite特定的事实)。

只要坚持mod_rewritemod_alias不能做你所需要的。

作为后续,如果您使用的是Apache 2.4.19或更高版本,则可以在<Location>部分中使用更简单的redirect格式,如mod_alias文档中所述 。 这种新格式使用expression式语法 ,允许使用variables。

例如:

 <VirtualHost *:80> ServerName lvh.me ServerAlias *.lvh.me <Location "/"> Redirect "https://%{SERVER_NAME}%{REQUEST_URI}" </Location> </VirtualHost> 

请注意,只有redirect指令适用于这种较短的格式,RedirectPermanent等不。