Правило перезаписи 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>
2 ответа
Если ты хочешь это http://www.mywebsite.com/
всегда будет отправлено https
вы должны использовать redirect
потому что использовать mod_rewrite
не рекомендуемое поведение
Согласно запросу на перенаправление на вики-страницу SSL Apache:
При использовании SSL у вас часто будет как минимум два виртуальных хоста: один на порту 80 для обслуживания обычных запросов и один на порту 443 для обслуживания SSL. Если вы хотите перенаправить пользователей с незащищенного сайта на сайт SSL, вы можете использовать обычную директиву Redirect внутри незащищенного 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 на HTTPS вики-страницу Apache.
Ваша конфигурация не работает, потому что она не определена как небезопасный VirtualHost (обычно на порту 80), который обрабатывает запросы http и перенаправляет их на безопасный VirtualHost.
Попробуйте добавить эти строки:
<VirtualHost *:80>
ServerName dev.dom1.com
Redirect permanent / https://dev.dom1.com/
</VirtualHost>
В этом случае вам не нужно DocumentRoot
потому что это VirtualHost
перенаправляет все
Rewrite
правило, указанное в вашем файле конфигурации VirtualHost
от доступа через http
протокол, например http://www.mywebsite.com:443/
будет https://www.mywebsite.com:443/
Вам также следует убедиться, что ваш сайт ссылается на правильную страницу (https) из ваших HTML-страниц.
Это старый пост, но в Ubuntu 14.04 оригинальное переписывание работает, вам просто нужно изменить его на:
<Directory /var/www/>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</Directory>