O redirecionamento do Apache de http para https não funciona

O redirecionamento do Apache de http para https não funciona

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 .htaccesspara 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.confestava 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.confsó 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.

informação relacionada