Https para redirect http usando o htaccess

Estou tentando redirect https://www.example.com para http://www.example.com . Eu tentei o seguinte código no arquivo .htaccess

RewriteEngine On RewriteCond %{HTTP_HOST} ^example\.com$ [NC] RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L] 

Este código redireciona com sucesso https://example.com para http://www.example.com . No entanto, quando eu digito https://www.example.com , isso me dá um erro de “página da Web não disponível” no navegador.

Eu também tentei os seguintes códigos 2 sem sucesso

Tentativa 1

 RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^/(.*):NOSSL$ http://www.example.com/$1 [R=301,L] 

Tentativa 2

 RewriteEngine On RewriteCond %{HTTPS} on RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} 

Ambas as tentativas acima falharam. Alguma sugestão?

A tentativa 2 estava perto da perfeição. Basta modificá-lo ligeiramente:

 RewriteEngine On RewriteCond %{HTTPS} on RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

No entanto, se o seu site não tiver um certificado de segurança, ele estiver em um ambiente de hospedagem compartilhada e você não quiser receber o “aviso” quando o site estiver sendo solicitado por meio de https, não será possível redirecioná-lo usando o htaccess. O motivo é que a mensagem de aviso é acionada antes que a solicitação passe para o arquivo htaccess, portanto, é necessário corrigi-lo no servidor. Vá para /etc/httpd/conf.d/ssl.conf e comente a parte sobre o servidor virtual 443. Mas as chances são de que seu provedor de hospedagem não lhe dará tanto controle. Então você teria que se mudar para um host diferente ou comprar o SSL apenas para que o aviso não seja acionado antes que o seu htaccess tenha a chance de redirect.

 RewriteEngine On RewriteCond %{SERVER_PORT} 443 RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

Você pode usar a seguinte regra para redirect de https para http :

  RewriteEngine On RewriteCond %{HTTPS} ^on$ RewriteRule ^(.*)$ http://example.com/$1 [NC,L,R] 

Explicação:

 RewriteCond %{HTTPS} ^on$ 

Verifica se o HTTPS está ativado (a solicitação é feita usando https)

Então

 RewriteRule ^(.*)$ http://example.com/$1 [NC,L,R] 

Redirecione qualquer solicitação ( https://example.com/foo ) para http://example.com/foo .

  • $ 1 faz parte do regex no padrão RewriteRule, ele contém qualquer valor que foi capturado em (. +) , Nesse caso, ele captura o request_uri completo após o nome do domínio.

  • [NC, L, R] são os flags, NC faz o caso uri senstive, você pode usar letras maiúsculas ou minúsculas no pedido.

O sinalizador L informa ao servidor para parar de processar outras regras se a regra atual tiver correspondido, é importante usar o sinalizador L para evitar conflito de regras quando você tem mais que regras em um bloco.

O sinalizador R é usado para fazer um redirecionamento externo.

A diferença entre http e https é que as solicitações de https são enviadas por meio de uma conexão criptografada por SSL. A conexão criptografada por SSL deve ser estabelecida entre o navegador e o servidor antes que o navegador envie a solicitação http.

As solicitações de https são, na verdade, solicitações http enviadas por uma conexão criptografada ssl. Se o servidor rejeitar para estabelecer uma conexão criptografada SSL, o navegador não terá conexão para enviar a solicitação. O navegador e o servidor não terão como falar um com o outro. O navegador não poderá enviar o URL que deseja acessar e o servidor não poderá responder com um redirecionamento para outro URL.

Então isso não é possível. Se você quiser responder a links https, precisará de um certificado SSL.

 RewriteCond %{HTTP:X-Forwarded-Proto} =https 

Seu código está correto. Basta colocá-los dentro do

Exemplo:

  SSLEnable RewriteEngine On RewriteCond %{HTTPS} on RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}