Правильное перенаправление Apache с http на https

Правильное перенаправление Apache с http на https

Я настроил новый виртуальный хост для нового сайта на своем сервере, но он ведет себя странно, несмотря на то, что у него точно такие же настройки, как у моего исходного сайта.

Я хочу, чтобы все запросы перенаправлялись на HTTPS, проще говоря. На моем основном сайте (рабочем) у меня это указано в конфиге VirtualHost, а в .htaccessу меня указано дополнительное правило, разрешающее короткие URL. Конкретно проблема на нерабочем сайте в том, что если я пытаюсь перейти на example.com/url, то редирект идет на https://example.comurlи удаляет нужное /из URL.

Я скопировал точную конфигурацию на новый VirtualHostи .htaccessфайл с рабочего сайта, поэтому не уверен, почему это не работает на новом. Мои записи DNS для обоих сайтов используют записи A, чтобы указывать на него, никаких перенаправлений или чего-либо еще не происходит на уровне DNS. Я пробовал вставлять a /в конце строк Redirectв коде ниже, но проблема не была решена. Сервер — Ubuntu 14.04, а Apache — версии 2.4.7. Оба сайта — это отдельные доменные имена с отдельными .confиспользуемыми файлами, но они размещены на одном сервере с одним и тем же IP-адресом. Как мне исправить эту проблему?

Соответствующий код в VirtualHost:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    Redirect permanent / https://example.com
</VirtualHost>

И в .htaccess:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule !.*\.html$ %{REQUEST_FILENAME}.html [L]

Если это поможет/имеет значение, вот конфигурация SSL в моем файле VirtualHost, хотя она размещена в самом начале файла вне всех остальных директив:

SSLCipherSuite AES128+EECDH:AES128+EDH
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubdo$
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff

SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"

А это конфигурация специально для VirtualHostсайта:

<VirtualHost *:443>
    ServerName example.com
    ServerAdmin [email protected]
    DocumentRoot /var/www/example
    ErrorLog ${APACHE_LOG_DIR}/errorexample.log
    Options -Indexes

    SSLEngine on
    SSLCertificateFile /etc/ssl/example/examplecert.crt
    SSLCertificateKeyFile /etc/ssl/example/examplekey.key
    SSLCertificateChainFile /etc/ssl/chain/class1.pem
</VirtualHost>

решение1

Для перенаправления на HTTPS:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Но вам понадобится виртуальный хост для ssl:

NameVirtualHost *:443
<VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com
    SSLEngine on
    SSLCertificateFile    /etc/apache2/ssl/apache.crt
    SSLCertificateKeyFile /etc/apache2/ssl/apache.key
</VirtualHost>

ПРИМЕЧАНИЕ:вам нужно создать SSL-сертификат... но естьотличный урокдля этого!

Связанный контент