Como você redireciona HTTPS para HTTP?
Pergunta
Como você redireciona HTTPS para HTTP?Ou seja, o oposto do que (aparentemente) todos ensinam.
Eu tenho um servidor em HTTPS pelo qual paguei uma certificação SSL e um espelho pelo qual não paguei e mantenho por perto apenas para emergências, por isso não merece obter uma certificação.
Nos desktops dos meus clientes, tenho ALGUNS atalhos que apontam para http://production_server
e https://production_server
(ambos funcionam).No entanto, eu sei que se meu servidor de produção cair, o encaminhamento de DNS entrará em ação e os clientes que possuem "https" em seu atalho ficarão olhando para https://mirror_server
(que não funciona) e uma grande tela vermelha de desconforto do Internet Explorer 7 para minha empresa.
Infelizmente, não posso simplesmente mudar isso no nível do cliente.Esses usuários são muito analfabetos em informática:e é muito provável que surtem ao ver erros de "insegurança" de HTTPS (especialmente a maneira como o Firefox 3 e o Internet Explorer 7 lidam com isso hoje em dia:PONTO COMPLETO, felizmente, mas não me ajudando aqui LOL).
Isso é muito fácil encontrar Soluções Apache para redirecionamento http->https, mas pela minha vida não posso fazer o oposto.
Ideias?
Solução
Isso não foi testado, mas acho que deve funcionar usando mod_rewrite
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}
Outras dicas
Tenha em mente que o mecanismo Rewrite só entra em ação quando a solicitação HTTP é recebida - o que significa que você ainda precisará de um certificado para que o cliente configure a conexão para enviar a solicitação!
No entanto, se a máquina de backup parecer ter o mesmo nome de host (no que diz respeito ao cliente), não haverá motivo para você não poder usar o mesmo certificado da máquina de produção principal.
Com base na resposta do ejunker, esta é a solução que funciona para mim, não em um único servidor, mas em um nuvem ambiente
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{ENV:HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Para aqueles que estão usando um .conf
arquivo.
<VirtualHost *:443>
ServerName domain.com
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/domain.crt
SSLCertificateKeyFile /etc/apache2/ssl/domain.key
SSLCACertificateFile /etc/apache2/ssl/domain.crt
</VirtualHost>
Se nenhuma das soluções acima funcionar para você (não funcionaram para mim), aqui está o que funcionou no meu servidor:
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [L,R=301]
todos os itens acima não funcionaram quando usei o cloudflare, este funcionou para mim:
RewriteCond %{HTTP:X-Forwarded-Proto} =https
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
e este definitivamente funciona sem proxies no caminho:
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
É melhor evitar usar mod_rewrite quando puder.
No seu caso, eu substituiria o Rewrite por isto:
<If "%{HTTPS} == 'on'" >
Redirect permanent / http://production_server/
</If>
O <If>
diretiva está disponível apenas no Apache 2.4+ conforme este blog aqui.
Nenhuma das respostas funciona para mim no site Wordpress, mas as seguintes funcionam (é semelhante a outras respostas, mas tem uma pequena mudança)
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
isso funciona para mim.
<VirtualHost *:443>
ServerName www.example.com
# ... SSL configuration goes here
Redirect "https://www.example.com/" "http://www.example.com/"
</VirtualHost>
<VirtualHost *:80>
ServerName www.example.com
# ...
</VirtualHost>
certifique-se de ouvir as portas 80 e 443.
Pelo que sei, uma meta atualização simples também funciona sem causar erros:
<meta http-equiv="refresh" content="0;URL='http://www.yourdomain.com/path'">