это Справочная страница 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 и т. Д. Нет.