Назад | Перейти на главную страницу

Принудительно использовать SSL с виртуальным хостом на основе имени (возможно, с .htaccess)

У меня есть несколько поддоменов, обслуживаемых Apache с использованием виртуальных хостов на основе имен. Он настроен так, что у меня есть один каталог, содержащий все страницы сайта, но он доступен через несколько поддоменов (веб-приложение с разной темой для каждого клиента). Для каждого поддомена у меня есть символическая ссылка на основной каталог, которая соответствует сопоставлению виртуального хоста на основе имени. Поэтому я просто использую $ _SERVER ['HTTP_HOST'] в своих скриптах php, чтобы определить, какую тему обслуживать, но база кода та же. Проблема в том, что на сайтах должен быть SSL, и мне сложно понять, как это сделать.

Я видел этот пример для .htaccess:

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

Но проблема в том, что это требует от вас жесткого кодирования домена www.example.com. Как я могу перейти на SSL-версию любого запрашиваемого домена вместо того, чтобы жестко его кодировать?

Я видел {HTTP_HOST} переменная используется в RewriteCond часть .htaccess, но, похоже, она не работает, когда я пытаюсь использовать ее в RewriteRule. Пробовал следующее, и это дало мне ошибку 500:

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

Возможность использовать те же условные переменные в строке подстановки делает это простым исправлением.

+ Изменить

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

к

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

Apache SSL не работает с виртуальным хостом имени .. см .:

http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI