На этой справочной странице Apache и в этой вики четко указано, что для достижения простых перенаправлений с 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 для достижения указанного выше эффекта?

answer

Ты не можешь. Redirectможет обрабатывать простые перенаправления, когда вы отправляете клиента на одно конкретное имя, но не имеет возможности выполнять сложные подстановки (не считая того факта, что %{HTTP_HOST}он mod_rewriteспецифичен).

Просто придерживайтесь mod_rewrite. mod_aliasне способен делать то, что вам нужно.

В качестве продолжения, если вы используете 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 и т. Д. - нет.