2010-05-13 3 views
1

У нас есть сайт, на который я позвоню example.com. Большую часть времени вы видите http://www.example.com, и иногда мы перенаправляем вас на https://www.example.com.Проблема с перенаправлением * .example.com & example.com на www.example.com для HTTPS

Мы хотим перенаправить всех, кто будет http://example.com или http: //*.example.com, до http://www.example.com, и то же самое для https. (В основном, чтобы избежать предупреждения, которое вы получите, если вы перейдете на https://example.com вместо https://www.example.com)

Наш файл-vhost находится в конце сообщения. Он прекрасно работает кроме для одного странного поведения:

Это последний результат я не могу понять. Я пробовал много пробных и ошибочных решений от Google & Stack Overflow, но ничего не изменило его. Даже если мы поменяем порядок конфигураций (так, чтобы 443 был до 80), он по-прежнему перенаправляет https://foo.example.com на http://www.example.com

Мы используем Apache/2.2.12 на Ubuntu.

Вот конфигурационный файл:

<VirtualHost *:80> 
    ServerName www.example.com 
    ServerAlias example.com *.example.com 
    ServerSignature On 
    DocumentRoot /var/www/example.com/public 
    RailsEnv 'production' 
    PassengerHighPerformance on 
    <Directory /var/www/example.com/public> 
     AllowOverride all 
     Options -MultiViews 
    </Directory> 
    SSLEngine Off 
    CustomLog /var/log/apache2/example.log combined 
    ErrorLog /var/log/apache2/example-error.log 
    # Possible values include: debug, info, notice, warn, error, crit, alert, emerg. 
    LogLevel warn 
    RewriteEngine On 
    RewriteCond %{HTTPS} off 
    RewriteCond %{HTTP_HOST} ^[^\./]+\.[^\./]+$ 
    RewriteRule ^/(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 
</VirtualHost> 

<VirtualHost *:443> 
    ServerName www.example.com 
    ServerAlias example.com *.acome.com 
    DocumentRoot /var/www/example.com/public 
    RailsEnv 'production' 
    PassengerHighPerformance on 
    <Directory /var/www/example.com/public> 
     AllowOverride all 
     Options -MultiViews 
    </Directory> 
    SSLCertificateFile /etc/ssl/certs/www.example.com.crt 
    SSLCertificateKeyFile /etc/ssl/private/example.com.private.key 
    SSLCACertificateFile /etc/ssl/certs/EV_intermediate.crt 
    SSLEngine On 
    CustomLog /var/log/apache2/ssl-example.log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" 
    ErrorLog /var/log/apache2/ssl-example-error.log 
    # Possible values include: debug, info, notice, warn, error, crit, alert, emerg. 
    LogLevel warn 
    RewriteEngine On 
    RewriteCond %{HTTPS} on 
    RewriteCond %{HTTP_HOST} ^[^\./]+\.[^\./]+$ 
    RewriteRule ^/(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L] 
</VirtualHost> 

ответ

0

Спасибо всем, кто нашел время, чтобы прочитать вопрос, или (еще лучше), чтобы попытаться помочь. Это то, что делает Stack Overflow таким полезным ресурсом.

Мы перечитываем TFM, узнали немного больше об исправлении Apache и вот ответ.

Проблема №1: Правила перезаписи (взяты из Google) были предназначены только для перенаправления acme.com на www.acme.com, а не на любой другой поддомен.

Проблема №2: По какой-то причине Chrome был перенаправлен на http://www.acme.com сам по себе. Когда мы полностью исключили правила перезаписи, описанное поведение все же произошло.

Измените правила перезаписи, чтобы фактически поймать любой поддомен, отличный от www.

См. Ниже рабочее решение.

Остается одна проблема., если вы перейдете на https://acme.com (или любой поддомен), некоторые браузеры будут предупреждать о том, что сертификация SSL не соответствует, прежде чем перенаправлять вас. Единственный способ исправить это - получить подстановочный сертификат. Поскольку мы используем сертификат Extended Validation, который был уже очень дорогим, нам просто нужно будет жить с этим предупреждением. Хотелось бы услышать о любых обходных решениях, которые позволили бы избежать предупреждения о недопустимом сертификате перед перенаправлением.

<VirtualHost *:80> 
    ServerName www.acme.com 
    ServerAlias acme.com *.acme.com 
    ServerSignature On 
    DocumentRoot /var/www/acme.com/public 
    RailsEnv 'production' 
    PassengerHighPerformance on 
    <Directory /var/www/acme.com/public> 
     AllowOverride all 
     Options -MultiViews 
    </Directory> 
    SSLEngine Off 
    CustomLog /var/log/apache2/acme.log combined 
    ErrorLog /var/log/apache2/acme-error.log 
    # Possible values include: debug, info, notice, warn, error, crit, alert, emerg. 
    LogLevel warn 
    RewriteEngine On 
    RewriteCond %{HTTPS} off 
    RewriteCond %{REQUEST_URI} ^/(stats/|missing\.html|failed_auth\.html|error/).* [NC] 
    RewriteRule .* - [L] 
    RewriteCond %{ENV:REDIRECT_STATUS} 200 
    RewriteRule .* - [L] 
    RewriteCond %{HTTP_HOST} !^www\.[a-z-]+\.[a-z]{2,6} [NC] 
    RewriteCond %{HTTP_HOST} ([a-z-]+\.[a-z]{2,6})$  [NC] 
    RewriteRule ^/(.*)$ http://www.%1/$1 [R=301,L] 
</VirtualHost> 

<VirtualHost *:443> 
    ServerName www.acme.com 
    ServerAlias acme.com *.acme.com 
    DocumentRoot /var/www/acme.com/public 
    RailsEnv 'production' 
    PassengerHighPerformance on 
    <Directory /var/www/acme.com/public> 
     AllowOverride all 
     Options -MultiViews 
    </Directory> 
    SSLCertificateFile /etc/ssl/certs/www.acme.com.crt 
    SSLCertificateKeyFile /etc/ssl/private/acme.com.private.key 
    SSLCACertificateFile /etc/ssl/certs/EV_intermediate.crt 
    SSLEngine On 
    CustomLog /var/log/apache2/ssl-acme.log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" 
    ErrorLog /var/log/apache2/ssl-acme-error.log 
    # Possible values include: debug, info, notice, warn, error, crit, alert, emerg. 
    LogLevel warn 
    RewriteEngine On 
    RewriteCond %{HTTPS} on 
    RewriteCond %{REQUEST_URI} ^/(stats/|missing\.html|failed_auth\.html|error/).* [NC] 
    RewriteRule .* - [L] 
    RewriteCond %{ENV:REDIRECT_STATUS} 200 
    RewriteRule .* - [L] 
    RewriteCond %{HTTP_HOST} !^www\.[a-z-]+\.[a-z]{2,6} [NC] 
    RewriteCond %{HTTP_HOST} ([a-z-]+\.[a-z]{2,6})$  [NC] 
    RewriteRule ^/(.*)$ https://www.%1/$1 [R=301,L] 
</VirtualHost> 
0
ServerAlias acme.com *.acome.com 

, что проблема тут? У вас есть неправильное имя вашего домена.

+0

Вряд ли проблема: я не думаю, что acme.com является его именем ACTUAL. :) – EMP

+1

Да, но это прекрасно иллюстрирует проблему с просьбой о помощи с использованием поддельных данных. ОП не показал нам * реальную * проблему. –

Смежные вопросы