multisite WordPress

Cómo cambiar WordPress Multisite de subdominios a subdirectorios ó viceversa

Si alguna vez has instalado WordPress Multisite sabrás que lo primero que te pide es que tomes una decisión: subdominios o subdirectorios.

multisite subdominios subdirectorios

Por favor, elige si quieres que los sitios de tu red WordPress usen subdominios o subdirectorios. No podrás cambiar esto después.

Instalación de WordPress

La decisión es importante, y a partir de aquí debes seguir unos pasos parecidos pero diferentes en función de lo que hayas elegido.

Lo cierto es que una vez tomada la decisión es para siempre, WordPress no te permite revertir este paso. Pero como la vida da muchas vueltas quizá el día de mañana puedas encontrarte en la necesidad de cambiar de modelo y WordPress no te permite hacerlo de forma nativa.

El plugin de ecommerce más fácil de usar para WordPress

¿Se puede hacer algo?

La respuesta es sí. De hecho en estas vueltas que da la vida que comentaba anteriormente, personalmente me ha tocado hacerlo en un par de ocasiones.

Podemos cambiar WordPress multisite de subdominios a subcarpetas y viceversa, pero requerirá unas acciones delicadas, por lo tanto es de vital importancia hacer un backup de nuestra base de datos y de los archivos wp-config.php .htaccess, por si cometemos algún error en alguno de los pasos que comentaremos a continuación. No hagáis nunca esto en producción.

Vamos a ver cómo haríamos para cambiar de una estructura multisite de subdominios a subcarpetas, es decir, pasar de https://sitio1.midominio.com/ a https://midominio.com/sitio1/.

Primer paso

En nuestro archivo de configuración wp-config.php buscaremos la línea:

define( 'SUBDOMAIN_INSTALL', true );

y la sustituimos por la siguiente:

define( 'SUBDOMAIN_INSTALL', false );

Guarda los cambios

Segundo paso

Nos vamos al archivo .htaccess y buscamos las reglas que están entre #BEGIN WordPress y #END WordPress. Tendremos esto:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]
</IfModule>
# END WordPress

y lo sustituiremos por:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]
</IfModule>
# END WordPress

Guardamos los cambios

Tercer Paso

Accedemos a la base de datos y buscamos la tabla wp_blogs. Nos encontraremos algo parecido a esto:

multisite subdominios

Como nuestra intención es pasar a subcarpetas, deberemos establecer a mano todos los sitios de nuestro multisite con el dominio principal en el campo domain de la tabla wp_blogs. Y en el campo path pondremos el nombre de lo que antes era nuestro subdominio. Esta tabla quedaría de la siguiente forma:

multisite subcarpetas

Si tenemos pocos sitios es una labor que podemos hacer rápidamente a mano. Si tienes cientos o miles de sitios quizá te convenga desarrollarte un pequeño script para automatizar esta tarea.

Cuarto paso

Como sabrás, WordPress almacena todos sus enlaces de forma absoluta, por lo tanto es necesario hacer un reemplazo de todas las URLs de todos nuestros sitios. Para esta labor es necesario utilizar WP-CLI o el script de Search & Replace. NUNCA de manera manual o haciendo UPDATES directamente a la base de datos, porque es muy probable que tengamos información serializada que podamos perder.

multisite search replace

Tendremos que hacer en reemplazo de URLs de esta forma para todos los sitios que tengamos en nuestro multisite.

Quinto paso

Comprobar que todo está funcionando correctamente

Viceversa, de subcarpetas a subdominios

En el caso de que queramos pasar un multisite de subcarpetas a subdominios el proceso es exactamente igual, pero a la inversa:

  • Por seguridad copia de la base de datos y de los ficheros wp-config.php y .htaccess
  • Definir en wp-config.php el SUBDOMAIN_INSTALL a true
  • Cambiar las reglas en el .htaccess por las de subdominios. (más info aquí)
  • Cambiar en todos los sitios la columna domain de la tabla wp_blogs estableciendo los subdominios de cada site. Dejaremos el campo path simplemente con la barra /
  • A través del script Search & Replace ó WP-CLI reemplazaremos todas las URLs del tipo midominio.com/sitio1 por sitio1.midominio.com
  • Comprobaremos que todo está funcionando correctamente

¿Te ha resultado útil esta información? 🍺

Si este post te ha resuelto un problema, invítame a un café o a una cerveza. Con este pequeño gesto me animas a seguir escribiendo.

Comentarios

4 comentarios en Cómo cambiar WordPress Multisite de subdominios a subdirectorios ó viceversa

  1. hola.. el funcionamiento de wp multisite es mucho más rápido que usando varios sitios instalados «comunmente» osea una instalación wp para cada dominio?.. saludos

  2. Buenas Tardes , ante todo Felicitaciones por blog , te pido ayuda a ver
    si puedo salir vivo de esto , instale multisite usando la configuracion
    de directorio , ya tengo los 2 sites listos uno en ingles y otro en
    español y todo funciona bien peroooooo , que pasa este tema no tiene
    archivos po , mo , y quiero traducir el texto read_more al español , el
    problema es que tengo que modificarlos en cada php de las distintas
    secciones del tema , pero obviamente al modicarlos dentro de la carpeta
    del tema me los traduce para ambos sitios , tanto ára el ingles como
    para el español , que puedo hacer , muchas gracias de antemano

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *:

  • El fin del tratamiento es únicamente la moderación de comentarios para evitar spam
  • La legitimación es tu consentimiento al comentar
  • No se comunicará ningún dato a terceros salvo por obligación legal
  • Tienes derecho al acceso, rectificación y eliminación de los comentarios