这个 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_rewrite 。 mod_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等不。