У меня есть следующие файлы конфигурации:
файл1:
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.
Есть ли у вас предложения, как заставить работать перенаправление?
решение1
Многие примеры работают на определенных конфигурациях. Этот работает всегда, независимо от того, какую конфигурацию использует ваш сервер Apache:
RewriteEngine On
RewriteCond %{SERVER_PORT} !443
RewriteRule ^(/(.*))?$ https://%{HTTP_HOST}/$1 [R=301,L]
решение2
Я столкнулся с точно такой же проблемой несколько дней назад. Я попробовал следующее в конфигурации VirtualHost (применимо к http-порту 80) в файле apache httpd.conf, и это сработало.
<Virtualhost *:80>
ServerAdmin [email protected]
ServerName site.com
ServerAlias site.com www.site.com
RedirectMatch permanent ^(.*)$ https://www.site.com$1
</Virtualhost>
Это работает просто великолепно, и вам не нужно никаких дополнительных настроек или модулей.
решение3
Лучше использовать .htaccess
для этого (если возможно), не нужно возиться с файлами конфигурации apache. Добавьте эти строки в начало вашего .htaccess
.
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
решение4
Наша проблема была в приоритете файла конфигурации. Короче говоря, HTTP VirtualHost 000-default.conf
переопределял настройки, которые мы создали в нашем собственном файле конфигурации.
Это сбивает с толку любого, кто знает значение слова "default", которое означает что-то, используемое только если оно не определено в другом месте. Мы глупо предположили, что это 000-default.conf
обеспечит конфигурацию только если она не была определена в другом файле конфигурации.
Мы ошибались. Apache просто использует конфигурацию в первом файле, который он встречает, основываясь на имени файла в алфавитно-цифровом порядке. Он переходит к следующему файлу, если не может найти соответствующий VirtualHost в этом файле, что вызывает забавную путаницу, если вы не знаете, как это работает, но довольно аккуратно, как только вы это поймете.