web-dev-qa-db-pt.com

Https para redirecionar http usando o htaccess

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?

65
Ansh

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]
98
arkascha

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.

29
Adela Ruffatti
RewriteEngine On
RewriteCond %{SERVER_PORT} 443
RewriteRule (.*) http://%{HTTP_Host}%{REQUEST_URI} [R=301,L]
8
Auero

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.

8
starkeen

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.

3
drhema
RewriteCond %{HTTP:X-Forwarded-Proto} =https
1
Eric Michalsen

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>
0
Hiro Itasiki