15 mayo 2012

Redirigir a una conexión segura https en Apache

Puede que, como administradores de un sistema, nos interese que todos los accesos a una determinada página web, se realicen siempre bajo protocolo seguro HTTPS.

Veremos dos posibilidades: Redirección permanente o Reescritura

Método de redirección permanente

El procedimiento será definir un Virtualhost para HTTPS y otro para HTTP. Desde el Virtualhost HTTP fijaremos una redirección permanente hacia HTTPS.
# /etc/apache2/sites-enabled/000-default
<VirtualHost *:80>
   ServerName  www.ejemplo.com
   ServerAdmin webmaster@ejemplo.com
   Redirect permanent / https://www.ejemplo.com
</VirtualHost>

Método de reescritura

Para que este método funcione, deberemos asegurarnos de tener instalado el módulo mod_rewrite. En caso de estar presente, el módulo se puede instalar mediante el siguiente comando (para que sea operativo, después habrá que reiniciar apache).
# a2enmod rewrite
Enabling module rewrite.
Run '/etc/init.d/apache2 restart' to activate new configuration!
Una vez instalado el módulo mod_rewrite ya estamos en disposición de preparar la reescritura de todo el sitio web añadiendo el siguiente código dentro del correspondiente VirtualHost de HTTP o, alternativamente, en un fichero .htaccess en la raíz del sitio web.
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
O, alternativamente
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.dominio.com/$1 [R,L]
Si se quiere redireccionar el contenido de una carpeta específica
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} folder
RewriteRule ^(.*)$ https://www.dominio.com/folder/$1 [R,L]
Finalmente, si lo que se quiere redireccionar es únicamente una página concreta (por ejemplo, un formulario) podemos utilizar el siguiente código.
RewriteEngine On
RewriteRule ^formulario\.html$ https://www.ejemplo.com/formulario.html [R=301,L]

2 comentarios:

Anónimo dijo...

Una pregunta, el redireccionamiento desde http me funcina bine, necesito hacer una redireccion desde una url https a una http pero no me lo toma de ninguna forma.

Hice lo siguiente y nada:
RewriteCond %{SERVER_PORT} ^443$
RewriteCond %{HTTPS} on

Quisiera hacer una redirección algo asi, desde http me funciona:
RewriteRule ^(.*)sonido/SDT__music_home.mp3$ http://statics.resources.misitio.com/sonido/SDT__music_home.mp3 [R=301,NC]
y no me funciona con nada.

agradezco vuestra respuesta

Unknown dijo...

Hola Anónimo
En entornos Debian/Ubuntu, dentro de la estructura de los ficheros de configuración de Apache2, existe un lugar donde se definen los hosts HTTP (/etc/apache2/sites-enabled/000-default) y otro donde se configuran los hosts HTTPS (/etc/apache2/sites-enabled/001-ssl).

La redirección que propones deberías de hacerla dentro del fichero de definición de los hosts HTTPS (/etc/apache2/sites-enabled/001-ssl).

Saludos