Como redirecionar o site para HTTPS de forma correta
Sabemos que redirecionar o site para HTTPS e ativar o certificado SSL é imprescindível nos dias de hoje. O HTTPS deve estar em todos os lugares e ultimamente, o Google considerou isso como um sinal de classificação para os resultados de seus mecanismos de pesquisa.
Há muitas explicações para você poder redirecionar o seu Web Site, para HTTPS, quando instala um certificado SSL. No entanto, muitos podem não funcionar com todos os testes e seu site acaba sendo visto como não seguro, por alguns navegadores.
Vamos ser rápidos e práticos, nesta postagem e mostrar duas formas fáceis para você redirecionar o site para HTTPS e ativar SSL, para todas as páginas.
Primeira opção para redirecionar site para HTTPS
Talvez o código a seguir, apenas funcione parcialmente.
E já li em muitos sites grandes na web e aconselham que você utilize o código abaixo, no arquivo .htaccess. Mas em um teste, ele funcionou parcialmente. Para vê-lo funcionando, insira no arquivo .htaccess do seu servidor Apache.
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Por que funciona parcialmente?
1 – Se o usuário digitar o site sem .https ele vai abrir normalmente sem o SSL. Se você adicionou outro código, para seu site abrir apenas com www, exemplo: www.seusite.com este código não vai alterar para .https, quando um usuário digigatr sem o www.
2 – Os buscadores sabem disso. Então, eles vão indexar páginas com e sem SSL, o que dificulta a compreensão dos usuários e do próprio navegador.
Você pode redirecionar o site para HTTPS seguinte maneira e tire suas conclusões
Copie o cole o código acima, no arquivo .htaccess que fica na raiz do seu servidor Apache. Em seguida tente abrir seu site das seguintes formas:
seusite.com
www.seusite.com
http://seusite.com
http://www.seusite.com
https://seusite.com
https://www.seusite.com
Observe, que em algumas destas opções o seu site, que tem certificado SSL instalado, vai abrir sem o .https e o navegador aceita normalmente.
Nota: estes testes foram feitos usando navegador Chrome, com certificados de validação de domínio. Não foram feitos os testes com certificados de validação estendida. Talvez, tenha resultados diferentes.
Códigos que vão funcionar corretamente com htaccess
Opção 1: arquivo .htaccess
Se o seu site funcionou corretamente com o código acima, ótimo. Você não precisa alterar, caso contrário, adicione o seguinte código no seu arquivo .htaccess
RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://www.seusite.com/\ [R=301,L] RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC] RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/\ [R,L]
Nota: lembre-se de alterar seusite.com para o nome do seu domínio, com a extensão correta. E verifique com seu provedor de hospedagem, se a porta é realmente 80. Se não, troque também o número da porta no código.
O código acima vai abrir o site com www e com https, instruindo o navegador a abrir apenas de forma segura, mesmo que o usuário digite, com qualquer uma das opções já citadas.
Se você prefere, que o seu site carregue sem www, mas com o https, basta retirar o www da segunda linha do código, que ficaria assim:
RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://seusite.com/\ [R=301,L]
Depois de escolher a forma preferida, para carregar seu site, faça os testes para ver como ele carrega.
seusite.com
www.seusite.com
http://seusite.com
http://www.seusite.com
https://seusite.com
https://www.seusite.com
Opção 2: Código PHP
A segunda opção, também funciona muito bem em sites PHP. Caso você tenha um header.php incluído em todas as páginas, basta inserir na primeira linha, o seguinte código. Se não tiver o header.php, então será necessário incluir no topo de cada página, o que torna mais trabalho.
<?php if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on') { if(!headers_sent()) { header("Status: 301 Moved Permanently"); header(sprintf( 'Location: https://%s%s', $_SERVER['HTTP_HOST'], $_SERVER['REQUEST_URI'] )); exit(); } } ?>
Este script, também faz a mesma função, mas pode não ser compatível com todos os sites PHP. Ele não foi testado com Wordpress, mas acho que funciona normalmente.
Se você tentar abrir o site, com todas as opções já mencionadas acima, ele vai carregar apenas com https. A vantagem deste código, é que você pode inserir em apenas algumas páginas do site, que julgar necessário.
Com uma destas duas opções, seu site deve sempre abrir com https, independentemente da forma como será acessado.
Você ainda pode fazer testes com outras opções
A variável está disponível desde apache 2.4, esta variável contém o valor do esquema solicitado (http ou https), no apache 2.4 você pode usar a seguinte regra:
RewriteEngine on RewriteCond %{HTTPS} off RewriteCond www.%{HTTP_HOST} ^(?:www\.)?(www\..+)$ [NC] RewriteRule ^ https://%1%{REQUEST_URI} [NE,L,R]
E tem esta também:
RewriteEngine on RewriteCond %{REQUEST_SCHEME} ^http$ RewriteCond %{HTTP_HOST} ^(www\.)?(.+)$ [NC] RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [NE,L,R]
Em todos os casos, para .htaccess coloque o código abaixo de RewriteEngine on dentro das tags iFModule.
Espero que isso possa lhe ajudar, a resolver o problema de validação de certificado SSL, que é relativamente fácil de configurar.