¿Cómo redirige HTTPS a HTTP?


¿Cómo redirigir HTTPS a HTTP?. Es decir, lo contrario de lo que (aparentemente) todo el mundo enseña.

Tengo un servidor en HTTPS para el que pagué una certificación SSL y un espejo para el que no tengo y mantengo alrededor solo para emergencias, por lo que no merece 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 funcionan). Sin embargo, sé que si mi servidor de producción se cae, entonces el reenvío de DNS se inicia y aquellos clientes que tienen "https" en su acceso directo estarán mirando a https://mirror_server (que no funciona) y una gran pantalla roja de Internet Explorer 7 de inquietud para mi empresa.

Desafortunadamente, no puedo cambiar esto a nivel de cliente. Estos usuarios son muy analfabetos informáticos: y es muy probable que se asusten al ver errores de "inseguridad" HTTPS (especialmente la forma en que Firefox 3 e Internet Explorer 7 lo manejan hoy en día: PUNTO, afortunadamente, pero no me ayuda aquí LOL).

Es muy fácil para encontrar Apache solutions for http->https redirection, pero por mi vida no puedo hacer lo contrario.

Ideas?

Author: shiser, 2008-08-12

9 answers

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}
 118
Author: ejunker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-04 14:58:29

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ía un certificado para que el cliente configure la conexión para enviar la solicitud.

Sin embargo, si la máquina de copia de seguridad parece tener el mismo nombre de host (en lo que respecta al cliente), entonces no debería haber ninguna razón para que no pueda usar el mismo certificado que la máquina de producción principal.

 67
Author: Kieron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-12 03:06:10

Basado en la respuesta de ejunker, esta es la solución que funciona para mí, no en un solo servidor sino en un entorno cloud

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{ENV:HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
 11
Author: antoniom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-24 08:32:49

Para aquellos que están usando un archivo .conf.

<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>
 6
Author: Rick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-01 18:50:39

Si ninguna de las soluciones anteriores funciona para usted (no lo hicieron para mí) aquí está lo que funcionó en mi servidor:

RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [L,R=301]
 5
Author: Stuart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-21 00:27:08

Todo lo anterior no funcionó cuando utilicé 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 el camino:

RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
 4
Author: mikulabc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-08 18:15:46

Es mejor ovoide usando mod_rewrite cuando se puede. En su caso, reemplazaría la reescritura con esto:

    <If "%{HTTPS} == 'on'" >
            Redirect permanent / http://production_server/
    </If>

La directiva <If> solo está disponible en Apache 2.4 + según este blog aquí

 1
Author: sys0dm1n,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-03 06:29:42

Ninguna de las respuestas funciona para mí en el sitio web de Wordpress, pero las siguientes funcionan (es similar a otras respuestas, pero tienen un pequeño cambio)

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
 0
Author: zhilevan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-12 19:27:47

Por lo que sé, una simple meta refresh también funciona sin causar errores:

<meta http-equiv="refresh" content="0;URL='http://www.yourdomain.com/path'">
 -8
Author: RobinUS2,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-03 07:06:09