Как бы вы заменили это правило перезаписи на перенаправление?
Эта справочная страница 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 в разделах
Например:
<VirtualHost *:80>
ServerName lvh.me
ServerAlias *.lvh.me
<Location "/">
Redirect "https://%{SERVER_NAME}%{REQUEST_URI}"
</Location>
</VirtualHost>
Обратите внимание, что только директива Redirect работает с этим более коротким форматом, RedirectPermanent и т. Д. - нет.