Подтвердить что ты не робот

Перенаправить HTTP на HTTPS на виртуальный хост по умолчанию без ServerName

На моем сервере apache я бы хотел перенаправить все входящие HTTP-запросы на эквивалентный запрос https. Уловка заключается в том, что я хотел бы сделать это для своего виртуального хоста по умолчанию, не указав ServerName, и работать с перенаправлением с любым именем сервера, появляющимся в URL-адресе запроса. Я надеюсь на что-то вроде этого:

NameVirtualHost *:80
<VirtualHost *:80>
    RedirectPermanent / https://%{SERVER_NAME}/
    ...
</VirtualHost>

Возможно ли это с помощью Redirect или мне придется прибегнуть к Rewrite?

4b9b3361

Ответ 1

Попробуйте добавить это в свою конфигурацию vhost:

RewriteEngine On
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]

Ответ 2

Оба отлично работают. Но, согласно документации Apache, вы должны избегать использования 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/

Ответ 3

Это полный способ также отказаться от перенаправленных перенаправлений;)

Эти правила предназначены для использования в файлах .htaccess, поскольку RewriteRule в записи *: 80 VirtualHost не нуждается в Условиях.

RewriteEngine on
RewriteCond %{HTTPS} off [OR] 
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R=301,L]

Eplanations

RewriteEngine on

== > включить движок вообще

RewriteCond %{HTTPS} off [OR]

== > соответствует не-https соединениям, или (не установив [OR], приведет к неявному И!)

RewriteCond %{HTTP:X-Forwarded-Proto} !https

== > соответствие пересылаемым соединениям (прокси, loadbalancer и т.д.) без https

RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R=301,L]

== > если одно из обоих условий соответствует, выполните переписывание всего URL-адреса, отправив 301, чтобы этот "узнал" клиент (некоторые делают, а некоторые нет), а L для последнего правила.

Ответ 4

Куда именно это добавить, пожалуйста.

<VirtualHost *:80>
    ServerName www.example.com
    Redirect / https://www.example.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName www.example.com
    # ... SSL configuration goes here
</VirtualHost>