На моем сервере apache я бы хотел перенаправить все входящие HTTP-запросы на эквивалентный запрос https. Уловка заключается в том, что я хотел бы сделать это для своего виртуального хоста по умолчанию, не указав ServerName
, и работать с перенаправлением с любым именем сервера, появляющимся в URL-адресе запроса. Я надеюсь на что-то вроде этого:
NameVirtualHost *:80
<VirtualHost *:80>
RedirectPermanent / https://%{SERVER_NAME}/
...
</VirtualHost>
Возможно ли это с помощью Redirect
или мне придется прибегнуть к Rewrite
?
Попробуйте добавить это в свою конфигурацию vhost:
RewriteEngine On
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
Оба отлично работают. Но, согласно документации 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/
Это полный способ также отказаться от перенаправленных перенаправлений;)
Эти правила предназначены для использования в файлах .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 для последнего правила.
RewriteRule
, вероятно, никогда не будет совпадать; почти уверен, что вы хотите удалить косую черту: RewriteRule ^(.*) …
Куда именно это добавить, пожалуйста.
<VirtualHost *:80>
ServerName www.example.com
Redirect / https://www.example.com/
</VirtualHost>
<VirtualHost *:443>
ServerName www.example.com
# ... SSL configuration goes here
</VirtualHost>
sudo a2enmod rewrite
которая остановит любые ошибки конфигурации configtest / apache2. (Что получит стоковая установка, если вы используете дополнения vhost, представленные выше)http://mywebiste.com
->https://mywebiste.com
), чтоhttps://mywebiste.com
если я также subdomaind (http://blog.mywebiste.com
->https://blog.mywebiste.com
)?