Mover un WP Multisite a un subdirectorio

21 dic 2012, 21:28:01
Vistas: 26.5K
Votos: 22

En primer lugar, he leído varios posts sobre este proceso. Sin embargo, por varias razones, el proceso sigue siendo difícil de implementar o solucionar por falta de ejemplos incluso abstractos, o quizás demasiado abstractos. Y hay algunos posts que dicen "no se puede hacer", casi siempre seguidos por advertencias de "con 3.5, ahora sí puedes", por lo que si es posible sigue siendo ambiguo, aunque sin duda no trivial.

Resumen:

¿Cómo mover un wordpress multisite (WPMS) de root.com a root/blogs?

Para este ejemplo, estamos moviendo un WPMS desde "root.com" a "root.com/blogs"

Entiendo que necesito actualizar las rutas en la base de datos y wp-config.php apropiadamente. Parece que también tendré que actualizar .htaccess. También soy consciente del problema de serialización con búsqueda/reemplazo y actualizaciones de consultas mysql.

Tengo un WPMS que he actualizado a 3.5. He encontrado las siguientes tablas con información de dominio y ruta

Configuración existente antes de mover al subdirectorio

1. wp_blogs

select blog_id, domain, path from wp_blogs;
+---------+-------------+--------+
| blog_id | domain      | path   |
+---------+-------------+--------+
|       1 | root.com    | /      |
|       2 | root.com    | /matt/ |
+---------+-------------+--------+

2. wp_site

select * in wp_site;
+----+-------------+------+
| id | domain      | path |
+----+-------------+------+
|  1 | root.com    | /    |
+----+-------------+------+

3. El blog_id corresponde a las tablas wp_#_options que contienen:

select option_name,option_value from wp_2_options 
where option_name = 'home' or option_name = 'siteurl';
+-------------+--------------------------+
| option_name | option_value             |
+-------------+--------------------------+
| home        | http://root.com/matt/    |
| siteurl     | http://root.com/matt/    |
+-------------+--------------------------+

4. En mi wp-config.php tengo las siguientes líneas específicas de WPMS:

define('WP_ALLOW_MULTISITE', true);
define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', false);
$base = '/';
define( 'DOMAIN_CURRENT_SITE', 'root.com' );
define( 'PATH_CURRENT_SITE', '/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );

5. Por último, en mi .htaccess, tengo:

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# archivos subidos
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]

# añadir una barra al final de /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).*) $1 [L]
RewriteRule  ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [L]
RewriteRule . index.php [L]

Actualizaciones requeridas para mover el sitio

Me parece que para mover mi sitio a /blogs, debería:

1. Actualizar wp_blogs a

mysql> update wp_blogs set domain=concat(domain, '/blogs'), path=concat(path, 'blogs/');
select blog_id, domain, path from wp_blogs where blog_id < 3;
+---------+-------------+--------------+
| blog_id | domain      | path         |
+---------+-------------+--------------+
|       1 | root.com    | /blogs/      |
|       2 | root.com    | /blogs/matt/ |
+---------+-------------+--------------+

2. Actualizar wp_site a

update wp_site set domain=concat(domain, '/blogs'), path=concat(path, 'blogs/');
select * from  wp_site;
+----+-------------+------------+
| id | domain      | path       |
+----+-------------+------------+
|  1 | root.com    | /blogs/    |
+----+-------------+------------+

3. wp_#_options

+-------------+--------------------------------+
| option_name | option_value                   |
+-------------+--------------------------------+
| home        | http://root.com/blogs/matt/    |
| siteurl     | http://root.com/blogs/matt/    |
+-------------+--------------------------------+

4. wp_config.php

define('WP_ALLOW_MULTISITE', true);
define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', false);
$base = '/blogs/';
define( 'DOMAIN_CURRENT_SITE', 'root.com' );
define( 'PATH_CURRENT_SITE', '/blogs/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );

nota: No tengo claro cómo se actualiza apropiadamente este paso

5. .htaccess

Encontré instrucciones vagas de "actualizar .htaccess apropiadamente", pero no específicas. ¿Actualizar RewriteBase? ¿Qué líneas en .htaccess debo actualizar cuando muevo root.com a root.com/blogs?

Faltarán en el proceso anterior las rutas encontradas en los posts. Mi preferencia es usar la herramienta de búsqueda y reemplazo para eso, después de haber hecho estas actualizaciones más fundamentales; ¿o me equivoco?

Actualización bungeshea sugiere que, sí, debo apuntar RewriteBase al subdirectorio "blogs", es decir,

RewriteBase /Blogs

Finalmente, si no conoces http://interconnectit.com/products/search-and-replace-for-wordpress-databases/ deberías. Es excelente.

3
Comentarios

Excelente pregunta, gran proceso +1

kaiser kaiser
10 feb 2013 14:19:54

¿Soy solo yo? Creo que las consultas en el proceso no son correctas update wp_blogs set domain=concat(domain, '/blogs'), path=concat(path, 'blogs/'); debería ser más bien update wp_blogs set path=concat('/blogs',path);

M-R M-R
2 dic 2015 20:50:02

Funciona. En /wp-admin al principio parece roto porque no cargan los scripts/css, pero lo solucioné agregando define('CONCATENATE_SCRIPTS', false); en wp-config.php

nicogaldo nicogaldo
3 mar 2022 00:42:22
Todas las respuestas a la pregunta 5
2

¡Sé que es antiguo pero lo he solucionado! Instalé WP MU en un subdirectorio. htaccess:

RewriteEngine On
RewriteBase /TU_SUBDIRECTORIO
RewriteRule ^index\.php$ - [L]

# añadir una barra diagonal al final de /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 ^(.*\.php)$ TU_SUBDIRECTORIO/$1 [L]
RewriteRule . index.php [L]

wp-config.php:

define( 'WP_ALLOW_MULTISITE', true ); 
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', false);
define('DOMAIN_CURRENT_SITE', 'localhost'); // o tu host
define('PATH_CURRENT_SITE', '');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);

y en tu base de datos, modifica esto:

wp_site
domain: localhost (O tu dominio pero sin subdirectorio!)
path: /

wp_blogs
domain: localhost (O tu dominio pero sin subdirectorio en cada blog_id!)
path: /

wp_sitemeta
siteurl: http://localhost/TU_SUBDIRECTORIO (reemplaza localhost con tu host)
3 jun 2015 17:06:40
Comentarios

esto fue increíblemente útil. Tenía una instalación en un subdominio y un volcado de la base de datos junto con un zip del sitio. Necesitaba restaurarlo en un nuevo servidor y tuve que actualizar manualmente el sitio. Las actualizaciones de la base de datos eran las más urgentes que necesitaba hacer. ¡Gracias!

Jacob Raccuia Jacob Raccuia
13 oct 2016 06:56:56

al principio pareció funcionar para mí, pero en la llamada a get_sites() y obtener la url no muestra la subcarpeta

nicogaldo nicogaldo
3 mar 2022 00:31:55
4

Parece que ya has resuelto tu propio problema - solo sigue tus pasos del 1 al 4, y para el paso 5 actualiza el RewriteBase en el archivo .htaccess. Para actualizar las rutas en las publicaciones, me gusta usar la herramienta Interconnect IT sterilized search-and-replace.

28 dic 2012 09:09:30
Comentarios

Gracias, bungshea. Como indico en mi publicación, ¿actualizar RewriteBase a qué, exactamente, según el ejemplo anterior? ¿Sería: RewriteBase /blog ?

Screenack Screenack
2 ene 2013 16:05:43

Sí: RewriteBase /blog

shea shea
2 ene 2013 23:41:57

Bungshea; hecho, pero todavía no funciona. Sigo recibiendo "Error al establecer la conexión con la base de datos" después de todo lo anterior. Peor aún, no hay errores registrados en mi archivo de errores de apache.

Screenack Screenack
4 ene 2013 19:10:23

@Screenack ¿cuáles son los detalles específicos del error "Error al establecer la conexión con la base de datos"? Pista: visita wp-admin

shea shea
1 sept 2013 09:30:24
1

Esto es lo que hice y funcionó. Sin subcarpeta. El sitio estaba previamente configurado como subdominio.

¡¡¡HAZ UNA COPIA DE SEGURIDAD PRIMERO!!!

wp-config.php (reemplaza este bloque con el que está en tu archivo)

define('WP_ALLOW_MULTISITE', true ); 
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', false);
define('DOMAIN_CURRENT_SITE', 'no-www-in-sitename.com'); // tu host
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);

.htaccess

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# añade una barra inclinada al final de /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]

ahora en la base de datos SQL:

1) para cada tabla wp_(sitio#)_sufijo ve a la tabla options y cambia siteurl y home a http://www.sitename.com/blogname

2) en wp_blogs para cada blog_id cambia el dominio de blogname.domain.com a domain.com y la ruta a /blogname/

3) no es necesario cambiar siteurl & home en wp_options o cualquier celda en wp_site o wp_sitemeta si la instalación está en la misma ubicación.

Después de terminar, asegúrate de ir a (en el panel de administrador superusuario) ajustes > enlaces permanentes y haz clic en guardar.

¡Voilà!

20 nov 2015 21:03:58
Comentarios

Esa barra diagonal al final de la ruta de los nombres de blog realmente resolvió mis problemas

Edgar Edgar
4 feb 2020 20:26:43
0

Esta es mi primera respuesta, ¡así que por favor sean considerados! :)

NO tenía un blog que ya estuviera en subdominios para ser convertido. Pero tuve que luchar porque era un blog antiguo y no me permitían hacer un blog en subdirectorio, y temía que WP hiciera cambios en mi base de datos para cuando me dieran los códigos para implementar.

Esto es lo que funcionó para mí en abril de 2018, chicos... Usé el wp-config de hot_barbara y también usé su archivo .htaccess.

Por lo tanto, por favor no opten por una subcarpeta - ¡yo no lo hice!

SIN EMBARGO, en la base de datos SQL, esto es lo que sucedió en mi caso - ya estaba así configurado, así que no hice ningún cambio:

  1. wp_site domain: xyzabc.com path: /

wp_blogs domain: xyzabc.com path: /

wp_sitemeta siteurl: h**ps://xyzabc.com/

Entiendo que deberían usar una barra diagonal al final (trailing slash) si así lo tenían en sus configuraciones.

5 may 2018 22:16:33
0

Reescribe tu archivo wp-config.php con este código:

define('SUBDOMAIN_INSTALL', false);

en lugar de define('SUBDOMAIN_INSTALL', true);

luego ve a:

http://www.website.com/wp-admin/network/setup.php

después:

Añade lo siguiente a tu archivo .htaccess en /var/www/vhosts/website.com/, reemplazando otras reglas de WordPress:

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# añade una barra diagonal al final de /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]

Eso es todo.

Crea un Nuevo Sitio con Subdirectorio

15 ene 2019 10:54:38