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

Проблема Apache + plesk vhost: .htaccess игнорируется!

У меня проблема с простой конфигурацией apache.

Когда пользователь просит https://mydomain.com я должен перенаправить его на https://www.mydomain.com, потому что мой https-сертификат действителен только для домена с www.

Я создаю vhost.conf в моем каталоге /var/www/vhosts/mydomain.com/conf/, внутри которого:

<Directory /var/www/vhosts/mydomain.com/httpsdocs>
    AllowOverride All
</Directory>

И мой файл .htaccess в /var/www/vhosts/mydomain.com/httpsdocs/:

RewriteEngine on
RewriteCond %{HTTPS_HOST} ^mydomain\.com
RewriteRule ^(.*)$ https://www.mydomain.com/$1 [R=301,L]

Но похоже, что .htaccess полностью игнорируется.

Любая идея?

Порядок https-соединения примерно

  1. типы пользователей https://mydomain.com в адресную строку - браузер разрешает это IP-адрес 1.1.1.1
  2. Браузер открывает соединение с 1.1.1.1 через порт 443.
  3. Сервер отправляет сертификат www.mydomain.com - браузер проверяет имя хоста «mydomain.com»
  4. Браузер отображает сообщение об ошибке, пользователь нажимает «ОК / продолжить / и т. Д.».
  5. Браузер отправляет HTTP-запрос через SSL-соединение, включая заголовок Host: «mydomain.com»
  6. mod_rewrite использует правила в вашем файле htaccess для отправки перенаправления.

Таким образом, сообщение об ошибке уже появилось бы до того, как соединение станет достаточно большим, чтобы mod_rewrite сработал. Чтобы предотвратить возникновение ошибок, вам нужно будет получить сертификат с альтернативными именами субъектов (т.е. работает как для www, так и для не-www) или использовать SNI (добавляет дополнительный шаг в согласовании SSL, где браузер может сообщить Apache, какое имя хоста хочет, а Apache может выбрать соответствующий сертификат).

Кроме того, переменная всегда называется% {HTTP_HOST}, даже если соединение HTTPS (поскольку это просто сокращение для «HTTP внутри туннеля SSL»).