Introducción
Cuando se instala un certificado SSL en el servidor, el sitio web no está disponible a través de una conexión HTTPS segura de forma predeterminada. Debe agregar " HTTPS " a una URL cada vez que necesite conectarse de forma segura. La mejor manera de lograr la máxima seguridad para los visitantes del sitio web es habilitar un redireccionamiento automático de HTTP a HTTPS.
Este tutorial le mostrará cómo redirigir una URL de HTTP a HTTPS, por ejemplo, de http://example.it a https://example.it, con Apache en Ubuntu 18.04.
Prerrequisitos
Este tutorial asume que tiene privilegios de superusuario ( sudo o root) en el servidor que ejecuta Apache. Si aún no lo ha configurado, siga este tutorial: Configuración inicial de Ubuntu 18.04 LTS.
Se supone que Apache está instalado. Si no está instalado, siga este tutorial: Cómo instalar LAMP (Apache MySQL PHP) en Ubuntu 18.04 LTS.
Habilitar módulo de reescritura
Para redirigir de HTTP a HTTPS, usaremos el módulo mod_rewrite de Apache. De esta forma, los usuarios podrán acceder al tuyo con mayor seguridad.
Primero, verifique que el módulo mod_rewrite esté habilitado con este comando:
sudo a2enmod rewrite
Reinicie Apache:
sudo service apache2 restart
Con el módulo Rewrite habilitado, podemos configurar Apache con reglas de redireccionamiento usando el archivo .htaccess.
Veamos cómo usar el archivo.htaccess para establecer las reglas de redireccionamiento.
Habilite el archivo.htaccess
Para habilitar.htaccess, abra su archivo de configuración de Apache. En Ubuntu, el archivo de configuración predeterminado se encuentra en /etc/apache2/sites-enabled/000-default.conf, así que abra el archivo:
sudo nano /etc/apache2/sites-enabled/000-default.conf
Busque DocumentRoot de su sitio y anótelo. De forma predeterminada, la carpeta raíz (DocumentRoot ) es /var /www /html, por lo que usaremos este directorio en nuestra configuración de ejemplo.
Agregue la siguiente directiva de directorio al final del archivo, si aún no está allí, y asegúrese de reemplazar DocumentRoot con su directorio (si es diferente); de lo contrario, deje lo siguiente:
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
Guarde y cierre el archivo presionando CTRL + X, seguido de Y para guardar los cambios y luego ENTER si está usando nano.
El archivo de configuración ahora debería verse así:
<VirtualHost *:80>...
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ServerName TUO_DOMINIO.it
ServerAlias www.TUO_DOMINIO.it
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined...
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
Ahora reinicie Apache para que el cambio surta efecto:
sudo service apache2 restart
Apache está configurado para leer archivos.htaccess ubicados en cualquier lugar del directorio /var /www /html. Ahora agreguemos las reglas de reescritura para la redirección.
Ahora cree o modifique el archivo.htaccess para habilitar las reglas de redireccionamiento. Muevamos directorios a DocumentRoot, en nuestro caso /var /www /html:
cd /var/www/html
Creemos o modifiquemos el archivo .htaccess:
sudo nano.htaccess
Por supuesto, si aún no ha creado el archivo, estará vacío. Ahora configuremos el redireccionamiento de www a non-www o de non-www a www.
Agregue las siguientes líneas de código para configurar el redireccionamiento de www a non-www con HTTPS:
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]
Viceversa de non-www a www con HTTPS:
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST}!^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301]
Conclusión
En este tutorial aprendimos cómo configurar las reglas de redireccionamiento para Apache2 de www a non-www y viceversa con HTTPS.