如何使用重定向来替换该重写规则?

如何使用重定向来替换该重写规则?

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_rewritemod_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 等则不适用。

相关内容