Introducción
El proveedor 1&1 ofrece un certificado SSL gratuito en el hosting desde hace poco tiempo (SSL starter).
Lo he decidido implementar en mi blog, que posee ciertas particularidades, al tener una instalación de WordPress en una carpeta distinta del directorio raíz y además uso un subdominio para él (que apunta a esa carpeta).
Puesto que el certificado SSL es sólo para un dominio (o subdominio), tengo que modificar la configuración de WordPress y efectuar redireccionamientos del subdominio al dominio principal, para así tener https en todo el blog.
WordPress en Carpeta distinta de la raíz y Subdominio
En principio, instalar WordPress en una carpeta distinta a la raíz es simple, y la propia interfaz de administración de WordPress permite hacerlo y crea automáticamente los archivos necesarios (index.php y .htaccess)
(ver ayuda de wordpress: https://codex.wordpress.org/Installing_WordPress paso 4)
Estos cambios en el panel de administración de WordPress producen cambios en dos variables de la base de datos, en la tabla wp_options, que son siteurl (instalación de wordpress) y home (página de inicio).
Es muy importante la consistencia entre estos valores de la administración de WordPress y los de la base de datos, pues existe una manera de saltarse los valores de la base de datos añadiendo en wp-config.php las directivas:
define('WP_HOME', 'http://mysite.com/'); define('WP_SITEURL', 'http://mysite.com/blog');
Esto está bien para corregir algún problema temporal de acceso a la administración de WordPress , pero una vez que conseguimos el acceso, hay que configurarlo todo de manera consistente y eliminar esas directivas del archivo wp-config.php.
En mi caso particular, quiero pasar del subdominio que apunta a la carpeta del wordpress (que no va a tener certificado SSL) al dominio principal (apuntando a la carpeta directamente) y donde sí va a haber certificado SSL:
En ambos casos, en la raíz, existen dos archivos .htaccess e index.php, creados por WordPress, lo que hace es cargar el wordpress desde el directorio donde está instalado.
Activación del certificado SSL
Por tanto, ahora el blog está disponible en las 2 urls, la del dominio principal y la del subdominio. Entonces podemos activar el SSL en el dominio principal, proceso muy simple:
Ahora es cuando hemos de volver a la página de administración de wordpress y cambiar http por https en los enlaces o urls del sitio.
Redireccionar el subdominio
El siguiente paso es redireccionar el subdominio al dominio principal, para no perder todos los enlaces de los buscadores. Hay que tener en cuenta la arquitectura de wordpress, pues es necesario redireccionar correctamente los contenidos de las imágenes y los plugins. Para ello edito el archivo .htaccess en la carpeta a la que apunta el subdomino (la misma donde está instalado el WordPress), así toda petición a este subdirectorio será reenviada al principal, con https:
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^blog.abrazalaweb.net RewriteRule ^wp-content/(.*)$ https://abrazalaweb.net/Directorio_WP/wp-content/$1 [R=301,L] RewriteCond %{HTTP_HOST} ^blog.abrazalaweb.net RewriteRule ^wp-includes/(.*)$ https://abrazalaweb.net/Directorio_WP/wp-includes/$1 [R=301,L] #esta para los posts incluso del wp-admin RewriteCond %{HTTP_HOST} ^blog.abrazalaweb.net RewriteRule ^(.*)$ https://abrazalaweb.net/$1 [R=301,L] # creadas por Wordpress RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress |
Para acabar, queda finalmente forzar https en la web, es decir, redireccionar todo el tráfico http hacia el dominio principal a https, y esto hay que hacerlo en el .htaccess del directorio raíz (creado por WordPress, al tener distintos valores la carpeta o directorio de instalación, y el directorio del «home».
También hay que tener en cuenta si existe otro dominio en el mismo hosting y para el que no tenemos SSL, con lo que hay que evitar que para él no se fuerce https:
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / # Forzar https RewriteCond %{HTTPS} off # No forzar https en otro dominio del mismo directorio raíz sin certificado ssl: RewriteCond %{HTTP_HOST} !mi_otro_dominio.es RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress |
Ajustes finales
Es posible que el navegado nos muestre un avisos sobre certificado SSL no válido pen algunos elementos de la página, y habrá que ir corrigiendo uno a uno, bien editando algún post o modificando algún archivo de los plugins o temas instalados.
Por ejemplo, navegando por algún post, y teniendo activadas las opciones de desarrolllo (F12) se nos muestra fácilmente el problema, cuya reparación es simple (en este caso, modificar el post, añadiendo https a los enlaces de las imágenes)