Estou tentando redirecionar 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 , em seguida, ele me dá um erro "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. Apenas modifique-o 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 seu site estiver sendo solicitado por meio do 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, você precisa corrigi-la 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 mover 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 redirecionar.
RewriteEngine On
RewriteCond %{SERVER_PORT} 443
RewriteRule (.*) http://%{HTTP_Host}%{REQUEST_URI} [R=301,L]
Você pode usar a seguinte regra para redirecionar 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 é em (a solicitação é feita usando https)
Então
RewriteRule ^(.*)$ http://example.com/$1 [NC,L,R]
Redirecionar 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ê tiver 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 HTTP 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 <VirtualHost *:443>
Exemplo:
<VirtualHost *:443>
SSLEnable
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_Host}%{REQUEST_URI}
</VirtualHost>