Anteriormente expliqué cómo forzar HTTPS en Apache y cómo redirigir al dominio con www. para HTTP y HTTPS en Nginx. Esta vez es el turno de implementar la redirección hacia el dominio con www. por delante sobre HTTPS en Apache.

Cabe recordar que, a fin de evitar problemas con Google a causa de contenido duplicado, es altamente recomendable que todos los dominios asociados a un sitio redirijan a uno por defecto. Por ejemplo si los dominios "linuxito.com" y "www.linuxito.com" resuelven ambos a un mismo sitio Web, es necesario seleccionar uno predilecto, y el resto deberán implementar redirecciones permanentes (HTTP 301) hacia el mismo. En mi caso "www.linuxito.com" es el dominio preferido y "linuxito.com" es una redirección permanente hacia "www.linuxito.com".

De esta forma, si un usuario ingresa a la URL:

http://linuxito.com/seguridad/180-forzar-https-en-apache

Será redireccionado inmediatamente hacia la siguiente:

http://www.linuxito.com/seguridad/180-forzar-https-en-apache

Si además se ha forzado el uso de HTTPS (mediante una redirección permanente hacia "https://"), la URL será la siguiente:

https://www.linuxito.com/seguridad/180-forzar-https-en-apache

Ya expliqué cómo forzar HTTPS en Apache, veamos ahora cómo redirigir "https://midominio.com/..." a "https://www.midominio.com/...".

Para comenzar es un requisito contar con un certificado válido para ambos dominios (con y sin "www."). No es obligatorio que el certificado sea el mismo. Si se han generado por separado (sería un caso extraño, pero puede ocurrir) es posible utilizar diferentes certificados para cada dominio.

Tal como expliqué en el artículo dedicado a Nginx, es necesario replicar la configuración de SSL pues la conexión SSL se establece antes de que se procese la solicitud desde los clientes.

De esta forma, en Apache se definirán dos VirtualHosts con HTTPS: uno que contiene la configuración del sitio, y otro que implementa la redirección permanente hacia el dominio principal:

<IfModule mod_ssl.c>

<VirtualHost *:443>
# Redirección permanente hacia el dominio principal
        ServerName sitioejemplo.com
        Redirect permanent / https://www.sitioejemplo.com/
        SSLEngine on
        SSLCertificateFile    /etc/letsencrypt/live/sitioejemplo.com/cert.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/sitioejemplo.com/privkey.pem
        SSLCertificateChainFile /etc/letsencrypt/live/sitioejemplo.com/chain.pem
</VirtualHost>

<VirtualHost *:443>
# Configuración del sitio HTTPS asociado al dominio principal
        ServerAdmin webmaster@localhost
        ServerName www.sitioejemplo.com
        DocumentRoot /var/www/sitioejemplo

        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/sitioejemplo>
                Options FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ExpiresActive on
        ExpiresDefault M2592000

        ErrorLog /var/log/apache2/sitioejemplo-error.log

        SSLEngine on
        SSLCertificateFile    /etc/letsencrypt/live/sitioejemplo.com/cert.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/sitioejemplo.com/privkey.pem
        SSLCertificateChainFile /etc/letsencrypt/live/sitioejemplo.com/chain.pem

En este ejemplo, el dominio principal es "www.sitioejemplo.com", y la redirección está implementada en el sitio "sitioejemplo.com". El certificado en cuestión es válido para ambos dominios, por ello ambos sitios apuntan al mismo.

De esta forma, los usuarios que accedan a "https://sitioejemplo.com/saraza?id=1" serán redirigidos a "https://www.sitioejemplo.com/saraza?id=1", respetando el recurso o archivo que se está accediendo junto con la query completa.


Tal vez pueda interesarte


Compartí este artículo