Eu tenho os seguintes arquivos conf:
arquivo1:
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>
Como você pode ver nas linhas comentadas, tentei várias abordagens.
arquivo2:
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>
Algo removido por simplicidade, nomes alterados para proteger os inocentes.
Eu atualizo esses arquivos no servidor /etc/httpd/vhosts
então corra
apachectl restart
O que me dá estes avisos:
[warn] NameVirtualHost 123.45.67.890:80 has no VirtualHosts
[warn] NameVirtualHost 123.45.67.890:80 has no VirtualHosts
Temos vários vhosts em execução neste servidor. As configurações acima parecem estar alinhadas, então não acho que esses avisos se apliquem aqui. Talvez errado.
Atualizar a página padrão 80 (http) em meu navegador sempre mostra a página http padrão.
Alguma sugestão sobre como fazer o redirecionamento funcionar?
Responder1
Muitos exemplos funcionam em configurações específicas. Este sempre funciona, não importa qual configuração seu servidor Apache use:
RewriteEngine On
RewriteCond %{SERVER_PORT} !443
RewriteRule ^(/(.*))?$ https://%{HTTP_HOST}/$1 [R=301,L]
Responder2
Eu enfrentei exatamente o mesmo problema alguns dias atrás. Eu tentei o seguinte na minha configuração do VirtualHost (aplicável à porta http 80) no arquivo httpd.conf do Apache que funcionou.
<Virtualhost *:80>
ServerAdmin [email protected]
ServerName site.com
ServerAlias site.com www.site.com
RedirectMatch permanent ^(.*)$ https://www.site.com$1
</Virtualhost>
Isso funciona perfeitamente e você não precisa de nenhuma configuração em nenhum outro lugar ou de nenhum módulo extra.
Responder3
Melhor uso .htaccess
para isso (se possível), não há necessidade de mexer nos arquivos de configuração do Apache. Adicione essas linhas ao início do seu arquivo .htaccess
.
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Responder4
Nosso problema era a precedência do arquivo de configuração. Resumindo, o HTTP VirtualHost 000-default.conf
estava substituindo as configurações que criamos em nosso próprio arquivo de configuração.
Isso é confuso para quem conhece o significado da palavra “padrão”, que significa algo usado apenas se não estiver definido em outro lugar. Nós tolamente assumimos que isso 000-default.conf
só forneceria configuração se não fosse definido em outro arquivo de configuração.
Nós estávamos errados. O Apache apenas usa a configuração no primeiro arquivo que encontra com base no nome do arquivo em ordem alfanumérica. Ele passa para o próximo arquivo se não conseguir encontrar um VirtualHost correspondente nesse arquivo, o que causa uma confusão divertida se você não sabe como funciona, mas é bem legal quando você sabe.