Назад | Перейти на главную страницу

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

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

Ты не можешь. 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 и т. Д. Нет.