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

Apache mod_rewrite: домен -> www.domain с подстановочным знаком SSL

У меня есть сервер Apache 2.2 и SSL-сертификат с подстановочными знаками для * .domain.com, и я настроил набор правил mod_rewrite для 80 и 443, который будет правильно перенаправлять запросы для domain.com на www.domain.com:

RewriteCond %{HTTP_HOST} ^domain.com
RewriteRule ^(.*)$ https://www.domain.com$1 [R=permanent,L]

(это тот, для 443; тот, что на 80, просто опускает 's' в 'https').

Эта часть работает правильно как для http, так и для https - она ​​выполняет перезапись - но это не совсем решает проблему, которую я хотел исправить. В частности, когда кто-то идет в https://domain.com, они получат предупреждение о сертификате, потому что подстановочный сертификат для * .domain.com не соответствует только domain.com. Если они решат принять сертификат и продолжить, перезапись будет выполнена правильно, и значок обычного замка заменит значок сердитого замка. Проблема в том, что они получают предупреждение в первую очередь - они должны выбрать игнорировать предупреждение о сертификате до того, как будет выполнена перезапись. Есть ли правильный способ направить трафик на https://domain.com к https://www.domain.com перед попыткой согласования SSL? Похоже, что mod_rewrite делает это постфактум.

Согласование SSL всегда происходит до запуска HTTP-запроса, этого невозможно избежать.

Единственный способ решить эту проблему - получить новый сертификат, в котором есть domain.com и *.domain.com перечисленные.

Как уже указывал Теро, согласование SSL происходит раньше mod_rewrite срабатывает. Это означает, что единственный способ решить эту проблему - получить сертификат, который также действителен для domain.com.

Поскольку Apache поддерживает SNI, он может предоставлять другой сертификат для другого имени хоста, поэтому вы можете просто получить дешевый или бесплатный дополнительный сертификат в такой компании, как StartSSL.

Однако, по моему опыту, люди редко печатают https:// в адресной строке, поэтому, если вы просто убедитесь, что http://domain.com перенаправляется прямо на https://www.domain.com, нет проблем.