这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>
apache 变量HTTP_HOST
似乎无法在重定向指令中被识别。
那么,有没有其他方法可以利用mod_alias来实现上述效果呢?
答案1
你不能。 Redirect
能够处理简单的重定向,即将客户端发送到单个特定的名称,但不能进行复杂的替换(撇开特定的事实%{HTTP_HOST}
)mod_rewrite
。
坚持下去mod_rewrite
。 mod_alias
无法满足您的需要。
答案2
作为后续操作,如果您使用 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 等则不适用。