¿Cómo se redirige HTTPS a HTTP?
Pregunta
¿Cómo se redirige HTTPS a HTTP?Es decir, lo contrario de lo que (aparentemente) todo el mundo enseña.
Tengo un servidor en HTTPS por el que pagué una certificación SSL y un espejo por el que no tengo y lo guardo sólo para emergencias, por lo que no merece la pena obtener una certificación.
En los escritorios de mi cliente tengo ALGUNOS accesos directos que apuntan a http://production_server
y https://production_server
(ambos trabajan).Sin embargo, sé que si mi servidor de producción falla, entonces se activa el reenvío de DNS y aquellos clientes que tienen "https" en su acceso directo estarán mirando https://mirror_server
(que no funciona) y una gran pantalla roja de inquietud para mi empresa en Internet Explorer 7.
Desafortunadamente, no puedo cambiar esto simplemente a nivel de cliente.Estos usuarios son muy analfabetos informáticos:y es muy probable que se asusten al ver errores de "inseguridad" de HTTPS (especialmente la forma en que Firefox 3 e Internet Explorer 7 lo manejan hoy en día:PUNTO COMPLETO, algo afortunadamente, pero no me ayuda aquí LOL).
Es muy fácil encontrar soluciones apache para redirección http->https, pero por mi vida no puedo hacer lo contrario.
¿Ideas?
Solución
Esto no ha sido probado pero creo que debería funcionar usando mod_rewrite
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}
Otros consejos
Tenga en cuenta que el motor de reescritura solo se activa una vez que se ha recibido la solicitud HTTP, lo que significa que aún necesitará un certificado para que el cliente configure la conexión para enviar la solicitud.
Sin embargo, si la máquina de respaldo parece tener el mismo nombre de host (en lo que respecta al cliente), entonces no debería haber ninguna razón para no poder usar el mismo certificado que la máquina de producción principal.
Según la respuesta de ejunker, esta es la solución que me funciona, no en un solo servidor sino en un nube medio ambiente
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{ENV:HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Para aquellos que están usando un .conf
archivo.
<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>
Si ninguna de las soluciones anteriores funciona para usted (no lo hicieron para mí), esto es lo que funcionó en mi servidor:
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [L,R=301]
Todo lo anterior no funcionó cuando usé Cloudflare, este funcionó para mí:
RewriteCond %{HTTP:X-Forwarded-Proto} =https
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
y este definitivamente funciona sin proxies en la forma:
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Es mejor evitar usar mod_rewrite cuando puedas.
En su caso, reemplazaría Rewrite con esto:
<If "%{HTTPS} == 'on'" >
Redirect permanent / http://production_server/
</If>
El <If>
La directiva solo está disponible en Apache 2.4+ según este blog aquí.
Ninguna de las respuestas funciona para mí en el sitio web de Wordpress, pero las siguientes funcionan (es similar a otras respuestas pero tiene un pequeño cambio)
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
esto funciona para mí.
<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>
asegúrese de escuchar los puertos 80 y 443.
Hasta donde yo sé, una simple actualización meta también funciona sin causar errores:
<meta http-equiv="refresh" content="0;URL='http://www.yourdomain.com/path'">