Перенаправление HTTP на HTTPS на виртуальном хосте по умолчанию без имени сервера
на моем сервере apache я хотел бы иметь возможность перенаправлять все входящие http-запросы на эквивалентный https-запрос. Загвоздка в том, что я хотел бы сделать это для моего виртуального хоста по умолчанию без указания ServerName
и перенаправление работает с любым именем сервера, которое появилось в url-адресе запроса. Я надеюсь на что-то вроде этого:
NameVirtualHost *:80
<VirtualHost *:80>
RedirectPermanent / https://%{SERVER_NAME}/
...
</VirtualHost>
возможно ли это с помощью Redirect
или мне придется прибегнуть к Rewrite
?
3 ответа:
попробуйте добавить это в свой vhost config:
RewriteEngine On RewriteRule ^(.*)$ https://%{HTTP_HOST} [R=301,L]
как работает нормально. Но согласно Apache docs вы должны избегать использования
mod_rewrite
для простых перенаправлений, и использоватьRedirect
. Поэтому, согласно им, вы должны предпочтительно сделать:<VirtualHost *:80> ServerName www.example.com Redirect / https://www.example.com/ </VirtualHost> <VirtualHost *:443> ServerName www.example.com # ... SSL configuration goes here </VirtualHost>
первый
/
послеRedirect
это url, вторая часть, где он должен быть перенаправлен.вы также можете использовать его для перенаправления URL-адреса поддомена:
Redirect /one/ http://one.example.com/
Это полный способ опустить ненужные перенаправления, тоже ;)
эти правила предназначены для использования в .файлы htaccess, а в RewriteRule в *:80 запись VirtualHost нужны никакие условия.
RewriteEngine on RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^/(.*) https://%{HTTP_HOST}/ [NC,R=301,L]
Eplanations:
RewriteEngine on
==> включить двигатель на всех
RewriteCond %{HTTPS} off [OR]
==> матч не-https соединения, или (не установка [или] вызовет неявное и !)
RewriteCond %{HTTP:X-Forwarded-Proto} !https
==> матч переадресованные соединения (прокси-сервер, балансировщик нагрузки и т. д.)без https
RewriteRule ^/(.*) https://%{HTTP_HOST}/ [NC,R=301,L]
==> если одно из обоих условий совпадает, сделайте перезапись всего URL, отправив 301, чтобы этот "узнал" клиент (некоторые делают, некоторые нет) и L для последнего правила.