HTTP к HTTPS переписывает правило, не работающее

человечность 14.04

Apache/2.4.7

Я отправляю здесь conf файл для своего виртуального хоста и значения по умолчанию ssl хост. не способный изобразить, что является мной делающий неправильно.

http://<website_url> показывает индекс папки. Я хочу перенаправить это к https.

https://<website_url> открывается прекрасный.

ВАЖНЫЙ: Я не включил сайт SSL по умолчанию.

 cat default-ssl.conf|grep -v "#"

<IfModule mod_ssl.c>
      <VirtualHost _default_:443>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        SSLEngine on
        SSLCertificateFile  /etc/ssl/certs/ssl-cert-snakeoil.pem
        SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
                SSLOptions +StdEnvVars
        </Directory>

        BrowserMatch "MSIE [2-6]" \
                nokeepalive ssl-unclean-shutdown \
                downgrade-1.0 force-response-1.0
        BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

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

И вот mywebsite конфигурационный файл:

cat www.mywebsite.com.conf|grep -v "#"

<VirtualHost *:443>
    ServerName www.mywebsite.com:443
    ServerAlias www.mywebsite.com
    ServerAdmin abc@mywebsite.com
    DocumentRoot /var/www/www.mywebsite.com/html

    Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
     <IfModule mod_rewrite.c>
      RewriteEngine On
      RewriteCond %{HTTPS} off
      RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
    </IfModule>

SSLEngine on   
    SSLEngine on
        SSLCertificateFile /etc/apache2/ssl/apache.crt
        SSLCertificateKeyFile /etc/apache2/ssl/apache.key

    <FilesMatch "\.(cgi|shtml|phtml|php)$">
        SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory /usr/lib/cgi-bin>
        SSLOptions +StdEnvVars
    </Directory>

    BrowserMatch "MSIE [2-6]" \
        nokeepalive ssl-unclean-shutdown \
        downgrade-1.0 force-response-1.0
    BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

    ErrorLog ${APACHE_LOG_DIR}/ssl.error.log
    CustomLog ${APACHE_LOG_DIR}/ssl.access.log combined
</VirtualHost>
3
задан 16 November 2014 в 22:36

2 ответа

Если Вы хотите это http://www.mywebsite.com/ всегда быть отправленным https необходимо использовать redirect потому что использование mod_rewrite не рекомендуемое поведение.

Согласно Запросу Перенаправления к Apache SSL страница Wiki:

При использовании SSL у Вас часто будет по крайней мере два виртуальных хоста: один на порте 80 для обслуживания обычных запросов, и один на порте 443 для обслуживания SSL. Если Вы хотите перенаправить пользователей от незащищенного сайта до сайта SSL, можно использовать обычную директиву Перенаправления в незащищенном VirtualHost

Так, попытайтесь добавить эту директиву в своем незащищенном VirtualHost:

Redirect permanent / https://www.mywebsite.com/

Если Вы хотите так или иначе использование rewrite правило, необходимо включить эти незащищенные строки VirtualHost:

RewriteEngine On
# This will enable the Rewrite capabilities

RewriteCond %{HTTPS} !=on
# This checks to make sure the connection is not already HTTPS

RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
# This rule will redirect users from their original location, to the same location but using HTTPS.
# i.e.  http://www.mywebsite.com/foo/ to https://www.mywebsite.com/foo/

как описано в HTTP к Apache HTTPS страница Wiki.


Ваша конфигурация doen't работа, потому что это не определяется незащищенный VirtualHost (обычно на порте 80), который обрабатывает запросы HTTP и перенаправляет их для обеспечения VirtualHost.

Попытка, добавляющая эти строки:

<VirtualHost *:80>
   ServerName dev.dom1.com
   Redirect permanent / https://dev.dom1.com/
</VirtualHost>

В этом случае Вам не нужен a DocumentRoot потому что это VirtualHost перенаправляет все.

Rewrite правило, показанное в Вашем конфигурационном файле, защищает безопасный VirtualHost от того, чтобы быть полученным доступ через http протокол, например http://www.mywebsite.com:443/ будет https://www.mywebsite.com:443/

Необходимо также проверить что сайт, связывающийся с корректной страницей (https) из страниц HTML.

8
ответ дан 17 November 2019 в 19:23

Это - старое сообщение, но в Ubuntu 14.04 исходные работы перезаписи, просто необходимо изменить его на:

<Directory /var/www/>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</Directory>
0
ответ дан 17 November 2019 в 19:23

Другие вопросы по тегам:

Похожие вопросы: