У меня есть следующие файлы conf:
file1:
NameVirtualHost 123.45.67.890:80
<VirtualHost 123.45.67.890:80>
ServerName example.com
RedirectPermanent / https://example.com/
# RewriteEngine On
# RewriteCond %{SERVER_PORT} !^443$
# RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [L,R]
# SSLRequireSSL
# Redirect permanent /secure https://example.com/
# Redirect / https://example.com/
</VirtualHost>
Как видно из закомментированных строк, я пробовал несколько подходов.
файл2:
NameVirtualHost 123.45.67.890:443
<VirtualHost 123.45.67.890:443>
DocumentRoot "/opt/www/example-docroot"
ServerName example.com
DirectoryIndex index.html
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /etc/httpd/conf.d/ssl/example.com/csr.example.2011.pem.blade
SSLCertificateKeyFile /etc/httpd/conf.d/ssl/example.com/nokey.example.2011.pem
SSLCACertificateFile /etc/httpd/conf.d/ssl/example.com/CA.blade.2011.csr
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/etc/httpd/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
Кое-что удалено для простоты, имена изменены, чтобы защитить невиновных.
Обновляю эти файлы на сервере / etc / httpd / vhosts
затем беги
apachectl restart
Что дает мне следующие предупреждения:
[warn] NameVirtualHost 123.45.67.890:80 has no VirtualHosts
[warn] NameVirtualHost 123.45.67.890:80 has no VirtualHosts
У нас есть множество хостов, запущенных с этого сервера. Вышеупомянутые конфигурации кажутся согласованными, поэтому я не думаю, что эти предупреждения применимы здесь. Может и не так.
При обновлении страницы 80 (http) по умолчанию в моем браузере всегда отображается страница http по умолчанию.
Есть предложения, как заставить работать перенаправление?
Многие примеры работают с конкретными конфигурациями. Этот всегда работает, независимо от того, какую конфигурацию использует ваш сервер Apache:
RewriteEngine On
RewriteCond %{SERVER_PORT} !443
RewriteRule ^(/(.*))?$ https://%{HTTP_HOST}/$1 [R=301,L]
Несколько дней назад я столкнулся с той же проблемой. Я попробовал следующее в моей конфигурации VirtualHost (применимо для http-порта 80) в файле apache httpd.conf, который работал.
<Virtualhost *:80>
ServerAdmin webmaster@site.com
ServerName site.com
ServerAlias site.com www.site.com
RedirectMatch permanent ^(.*)$ https://www.site.com$1
</Virtualhost>
Это работает как шарм, и вам больше не нужна никакая конфигурация или какой-либо дополнительный модуль.
Лучше использовать .htaccess
для этого (если возможно) нет необходимости возиться с файлами конфигурации apache. Добавьте эти строки в начало вашего .htaccess
.
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
У меня была такая же проблема с apache 2.4 на centos 7, и исправление, которое сработало для меня без использования RewriteEngine, заключалось в добавлении : 443 в директиву ServerName в VirtualHost для https.
<VirtualHost 123.45.67.890:443>
DocumentRoot "/opt/www/example-docroot"
ServerName example.com:443
Я думаю, что в прошлый раз это случилось со мной, это могло быть что-то странное, например NameVirtualHost *:80
/NameVirtualHost *:443
и / или Listen 80
/Listen 443
были где-то кроме ports.conf для apache2.
Вот то, что у меня есть в VirtualHost для перенаправления на https для всех страниц, кроме прессы (было видео, которое не могло быть обслужено https, поэтому пришлось перенаправить обратно на http, иначе люди получили бы уродливые предупреждения о том, что страница небезопасна):
<VirtualHost *:80>
ServerName example.com
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/press/.*
RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NC]
</VirtualHost>
Я только что нашел эту ссылку сегодня, возможно, это поможет: http://www.serveridol.com/2012/09/24/apache-forcing-all-url-to-https-on-www-domain/
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*) https://%{SERVER_NAME}/$1