У меня есть несколько поддоменов, обслуживаемых 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 не работает с виртуальным хостом имени .. см .: