Mover un WP Multisite a un subdirectorio

20

En primer lugar, he leído varias publicaciones sobre este proceso. Sin embargo, por varias razones, el proceso sigue siendo difícil de implementar o solucionar por falta de ejemplos abstractos, o quizás demasiado abstractos. Y hay algunas publicaciones de "no puedo hacer", casi siempre seguidas de "con 3.5, ahora puedes" advertencias, así que si uno puede permanecer ambiguo, aunque sin duda no es trivial.

Resumen:

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

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

Entiendo que necesito actualizar las rutas en la base de datos y wp-config.php adecuadamente. Parece que también tengo que actualizar .htaccess? También estoy al tanto del problema de serialización con las actualizaciones de búsqueda / reemplazo y consulta mysql.

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

Configuración de trabajo existente antes de pasar 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 de opciones wp _ # _ 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]

# uploaded files
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [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).*) $1 [L]
RewriteRule  ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [L]
RewriteRule . index.php [L]

Actualizaciones necesarias para mover el sitio

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

1. Actualice 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. Actualice 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 _ # _ opciones

+-------------+--------------------------------+
| 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 estoy claro cómo este paso se actualiza adecuadamente

5. .htaccess

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

Falta el proceso anterior serán los caminos encontrados en las publicaciones. Mis objetivos son usar la herramienta de búsqueda y reemplazo para eso, después de haber realizado estas actualizaciones más fundamentales; o estoy equivocado?

Actualizar bungeshea sugiere que sí, apunto RewriteBase al subdirectorio "blogs", es decir,

RewriteBase /Blogs

Finalmente, si no sabe acerca de http://interconnectit.com/products/search-and-replace-for-wordpress-databases/ , debería hacerlo. Es excelente.

Screenack
fuente
3
Gran pregunta, gran proceso +1
kaiser
1
¿Se trata sólo de mí? Creo que las consultas en el proceso no son correctas, update wp_blogs set domain=concat(domain, '/blogs'), path=concat(path, 'blogs/'); deberían serloupdate wp_blogs set path=concat('/blogs',path);
MR

Respuestas:

7

¡Sé que es viejo pero lo arreglé! Instalé WP MU en una subcarpeta. htaccess:

RewriteEngine On
RewriteBase /YOUR_SUBFOLDER
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 ^(.*\.php)$ YOUR_SUBFOLDER/$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'); // or your host
define('PATH_CURRENT_SITE', '');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);

y en su base de datos, modifique esto:

wp_site
domain: localhost (OR your domain but no subdirectory!)
path: /

wp_blogs
domain: localhost (OR your domain but no subdirectory in each blog_id!)
path: /

wp_sitemeta
siteurl: http://localhost/YOUR_SUBFOLDER (replace localhost with your host)
nicmare
fuente
Esto fue increíblemente útil. Tuve una instalación de subdominio y un volcado de base de datos y zip del sitio. Necesitaba restaurarlo en un nuevo servidor y tuve que actualizar manualmente el sitio. Las actualizaciones de la base de datos fueron las más imprescindibles que necesitaba hacer. ¡Gracias!
Jacob Raccuia
2

Me parece que ha resuelto su propio problema: solo siga los pasos 1 a 4 y para el paso 5 actualice el RewriteBasein .htaccess. Para actualizar las rutas en las publicaciones, me gusta usar la herramienta de búsqueda y reemplazo esterilizada de Interconnect IT .

Ella a
fuente
Gracias, Bungshea. Como indico en mi publicación, ¿actualizar RewriteBase a qué, exactamente, según el ejemplo anterior? ¿Sería eso: RewriteBase / blog?
Screenack
Sí:RewriteBase /blog
karité
Bungshea hecho, pero aún no funciona. Todavía aparece "Error al establecer la conexión de la base de datos" después de todo lo anterior. Peor aún, no hay errores arrojados a mi registro de errores de Apache.
Screenack
@Screenack, ¿cuáles son los detalles de "Error al establecer la conexión de la base de datos"? Sugerencia: visitawp-admin
shea
1

Ok, esto es lo que hice y esto funcionó. Sin subcarpeta. El sitio se configuró previamente para el subdominio.

RESPALDO PRIMERO !!!

wp-config.php (reemplace este bloque con el bloque en su archivo)

define('WP_ALLOW_MULTISITE', true ); 
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', false);
define('DOMAIN_CURRENT_SITE', 'no-www-in-sitename.com'); // your 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]

# 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]

ahora en el SQL DB:

1) para cada wp_ (sitio #) _ tablesuffix vaya a la tabla de opciones y cambie siteurl y home a http://www.sitename.com/blogname

2) wp_blogs para cada cambio blog_id el dominio desde el blogname.domain.comque domain.comy la ruta/blogname/

3) no es necesario cambiar wp_options siteurl & home ni ninguna celda en wp_site o wp_sitemeta si la instalación se realiza en la misma ubicación.

Una vez que haya terminado, asegúrese de ir a (en el panel de administración del superusuario) la configuración> enlaces permanentes y haga clic en guardar.

Voila!

hot_barbara
fuente
0

Esta es mi primera respuesta, así que por favor sea considerado. :)

NO tenía un blog que ya estaba en subdominios para convertir. Pero tuve que pelear porque era un blog antiguo y no me dejaban hacer un blog subdirectorio y temía que WP hiciera cambios en mi base de datos para cuando me dieran los códigos para poner.

Esto es lo que funcionó para mí en abril de 2018 chicos ... Usé la configuración de wp de hot_barbara y también utilicé el .htaccess de ellos.

Por lo tanto, no busque una subcarpeta, ¡no lo hice!

SIN EMBARGO, en SQL DB, esto es lo que sucedió en mi caso: ya era así, así que no hice ningún cambio:

  1. wp_site dominio: xyzabc.com ruta: /

wp_blogs dominio: xyzabc.com ruta: /

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

Según tengo entendido, usaría una barra inclinada final si la tuviera en su configuración.

Ebe
fuente
0

Reescribe tu wp-config.phpcon 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

luego:

Agregue lo siguiente a su archivo .htaccess en /var/www/vhosts/website.com/, reemplazando otras reglas de WordPress:

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]

Eso es.

Crear un nuevo sitio con subdirectorio

Amran
fuente