Я ищу правильный способ обработки перенаправления небезопасных (через порт 80) запросов на безопасный (порт 443) с конфигурацией сервера Apache. Я тоже не хочу помещать это в свой файл .htaccess.
В настоящее время у меня есть это в моем httpd.conf файл:
ServerName example.com
ServerAlias *.example.com
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.+)\.example\.com$
RewriteRule ^(.*)$ https://%1.example.com/$1 [R=302,L]
Цель состоит в том, чтобы выполнить перенаправление с подстановочными знаками (в субдомене и подпапке). Чтобы быть конкретным, вот несколько основных вариантов использования:
- http://subdomain.example.com to https://subdomain.example.com - http://example.com to https://www.example.com - http://www.example.com/contact/ to https://www.example.com/contact - http://subdomain.example.com/contact/ to https://subdomain.example.com/contact
Короче просто заменив http с участием https при соблюдении двух условий:
Запрошенный URI содержит mydomain.com
Запрошенный URI еще не защищен (только HTTP-трафик)
Я пробовал множество различных методов, но, к моему большому удивлению, ничто не могло охватить все варианты поддоменов и подпапок.
Любые идеи? Спасибо!
Для перенаправления на HTTPS:
RewriteEngine On
Скидка RewriteCond% {HTTPS}
RewriteRule ^ https: / /% {HTTP_HOST}% {REQUEST_URI}
Но для ssl нужен виртуальный хост:
ИмяVirtualHost *: 443
<VirtualHost *: 443>
ServerName example.com
ServerAlias www.example.com
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
</ VirtualHost>
Объяснение используемых директив перезаписи мода
RewriteEngine On --- Он включит движок mod_rewrite сервера Apache на
RewriteCond% {HTTPS} выкл. ------
Будет содержать текст «включено», если соединение использует SSL / TLS, или «выключено» в противном случае. (Эту переменную можно безопасно использовать независимо от того, загружен ли mod_ssl). будет оценивать как истинное состояние, если соединение не ssl / tls
RewriteRule ^ https: / /% {HTTP_HOST}% {REQUEST_URI}
это должно сформировать URL-адрес, первоначально запрошенный клиентом, но в https
Простой виртуальный хост - лучший способ перехватить все HTTP-запросы. Тогда вы не сможете случайно перенаправить HTTPS-запросы. Что-то вроде.
<VirtualHost *:80>
ServerName example.com
ServerAlias *.example.com
# Redirect subdomains.
RewriteEngine on
RewriteCond %{HTTP_HOST} (\w+.example.com)
RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301]
# Everything else to www.example.com preserving URI path
Redirect 301 / https://www.example.com/
</VirtualHost