Как бы вы заменили это правило перезаписи на перенаправление?

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

2 ответа

Решение

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

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

В качестве продолжения, если вы используете Apache 2.4.19 или новее, вы можете использовать более простой формат Redirect в разделах , как подробно описано в документации mod_alias. Этот новый формат использует синтаксис выражений, что позволяет использовать переменные.

Например:

<VirtualHost *:80>
    ServerName lvh.me
    ServerAlias *.lvh.me

    <Location "/">
        Redirect "https://%{SERVER_NAME}%{REQUEST_URI}"
    </Location>
</VirtualHost>

Обратите внимание, что только директива Redirect работает с этим более коротким форматом, RedirectPermanent и т. Д. - нет.

Другие вопросы по тегам