Mutarea unui WP Multisite într-un subdirector

21 dec. 2012, 21:28:01
Vizualizări: 26.5K
Voturi: 22

În primul rând, am citit mai multe articole despre acest proces. Cu toate acestea, din diverse motive, procesul rămâne dificil de implementat sau de depanare din lipsa unor exemple concrete sau poate prea abstracte. Și există câteva postări de tipul "nu se poate face", aproape întotdeauna urmate de precizări că "cu 3.5, acum se poate", așa că rămâne ambiguu dacă este posibil, deși fără îndoială nu este trivial.

Sumar:

Cum să muți un wordpress multisite (WPMS) de la root.com la root/blogs?

Pentru acest exemplu, mutăm un WPMS de la "root.com" la "root.com/blogs"

Înțeleg că trebuie să actualizez căile în baza de date și wp-config.php corespunzător. Se pare că ar trebui să actualizez și .htaccess? Sunt de asemenea conștient de problema serializării cu căutarea/înlocuirea și actualizările interogărilor mysql.

Am un WPMS pe care l-am actualizat la 3.5. Am găsit următoarele tabele cu informații despre domeniu și cale

Configurația existentă funcțională înainte de mutarea în subdirector

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. Blog_id-ul corespunde tabelelor wp_#_options care conțin:

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. În wp-config.php am următoarele linii specifice 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. În final, în .htaccess, am:

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

# fișiere încărcate
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]

# adaugă un slash la finalul /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]

Actualizări necesare pentru mutarea site-ului

Mi se pare că pentru a muta site-ul meu în /blogs, ar trebui să:

1. Actualizez wp_blogs la

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. Actualizez wp_site la

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 );

notă: Nu sunt sigur cum se actualizează corect acest pas

5. .htaccess

Am găsit instrucțiuni vagi de tipul "actualizează .htaccess corespunzător", dar nu specifice. Actualizez RewriteBase? Ce linii din .htaccess trebuie să actualizez când mut root.com la root.com/blogs?

Din procesul de mai sus vor lipsi căile găsite în postări. Prefer să folosesc instrumentul de căutare și înlocuire pentru asta, după ce am făcut aceste actualizări fundamentale; sau greșesc?

Actualizare bungeshea sugerează că, da, trebuie să setez RewriteBase la subdirectorul "blogs", adică,

RewriteBase /Blogs

În final, dacă nu știți despre http://interconnectit.com/products/search-and-replace-for-wordpress-databases/ ar trebui. Este excelent.

3
Comentarii

Excelentă întrebare, proces grozav +1

kaiser kaiser
10 feb. 2013 14:19:54

Doar eu cred așa? Cred că interogările din proces nu sunt corecte update wp_blogs set domain=concat(domain, '/blogs'), path=concat(path, 'blogs/'); ar trebui să fie mai degrabă update wp_blogs set path=concat('/blogs',path);

M-R M-R
2 dec. 2015 20:50:02

Funcționează. În /wp-admin prima impresie este că nu merge pentru că scripturile/css nu se încarcă, dar am rezolvat prin adăugarea define('CONCATENATE_SCRIPTS', false); în wp-config.php

nicogaldo nicogaldo
3 mar. 2022 00:42:22
Toate răspunsurile la întrebare 5
2

Știu că e veche, dar am rezolvat-o! Am instalat WP MU într-un subfolder. htaccess:

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

# adaugă slash final la /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'); // sau host-ul tău
define('PATH_CURRENT_SITE', '');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);

și în baza de date, modifică asta:

wp_site
domain: localhost (SAU domeniul tău dar fără subdirector!)
path: /

wp_blogs
domain: localhost (SAU domeniul tău dar fără subdirector în fiecare blog_id!)
path: /

wp_sitemeta
siteurl: http://localhost/YOUR_SUBFOLDER (înlocuiește localhost cu host-ul tău)
3 iun. 2015 17:06:40
Comentarii

acest lucru a fost incredibil de util. Am avut o instalare pe subdomeniu și un dump de baza de date și un arhiv al site-ului. Am avut nevoie să-l restaurez pe un server nou și a trebuit să actualizez manual site-ul. Actualizările bazei de date au fost cele mai importante pe care a trebuit să le fac. Mulțumesc!

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

la început părea să funcționeze pentru mine, dar în apelul către get_sites() și obținerea url nu afișează subfolderul

nicogaldo nicogaldo
3 mar. 2022 00:31:55
4

Se pare că ai rezolvat singur problema - urmează doar pașii tăi de la 1 la 4, iar pentru pasul 5 actualizează RewriteBase în fișierul .htaccess. Pentru actualizarea căilor în postări, îmi place să folosesc instrumentul Interconnect IT sterilized search-and-replace.

28 dec. 2012 09:09:30
Comentarii

Mulțumesc, bungshea. După cum am menționat în postarea mea, trebuie să actualizez RewriteBase la ce, exact, conform exemplului de mai sus? Ar fi: RewriteBase /blog ?

Screenack Screenack
2 ian. 2013 16:05:43

Da: RewriteBase /blog

shea shea
2 ian. 2013 23:41:57

Bungshea; am făcut modificarea, dar încă nu funcționează. Încă primesc eroarea "Error establishing database connection" după toate schimbările de mai sus. Mai rău, nu apar erori în jurnalul de erori Apache.

Screenack Screenack
4 ian. 2013 19:10:23

@Screenack care sunt specificitățile erorii "Error establishing database connection"? Sugestie: vizitează wp-admin

shea shea
1 sept. 2013 09:30:24
1

OK, iată ce am făcut și a funcționat. Fără sub_folder. Site-ul a fost configurat anterior pe subdomeniu.

FĂ O COPIE DE SIGURANȚĂ ÎNTÂI!!!

wp-config.php (înlocuiește acest bloc cu cel din fișierul tău)

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

.htaccess

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

# adaugă o bară oblică la final pentru /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]

acum în baza de date SQL:

1) pentru fiecare wp_(site#)_tablesuffix mergi la tabela options și schimbă siteurl și home în http://www.sitename.com/blogname

2) în wp_blogs pentru fiecare blog_id schimbă domeniul de la blogname.domain.com la domain.com și calea la /blogname/

3) nu este nevoie să modifici siteurl & home din wp_options sau orice celule din wp_site sau wp_sitemeta dacă instalarea este în aceeași locație.

După ce ai terminat, asigură-te că mergi (în panoul de administrare superuser) la setări > legături permanente și dai click pe salvare.

Voila!

20 nov. 2015 21:03:58
Comentarii

Acel slash final în calea numelor de bloguri chiar mi-a rezolvat problemele

Edgar Edgar
4 feb. 2020 20:26:43
0

Acesta este primul meu răspuns, așa că vă rog să fiți indulgenți! :)

NU aveam un blog care era deja în subdomenii pentru a fi convertit. Dar a trebuit să mă lupt pentru că era un blog vechi și nu mi-au permis să creez un blog în subdirector, iar mi-a fost teamă că WP ar fi făcut modificări în baza mea de date până când mi-au dat codurile necesare.

Iată ce a funcționat pentru mine în aprilie 2018, prieteni... Am folosit wp-config de la hot_barbara și am folosit și fișierul .htaccess de la ei.

Prin urmare, vă rog să nu optați pentru un subfolder - eu nu am făcut-o!

CU TOATE ACESTEA, în baza de date SQL, iată ce s-a întâmplat în cazul meu - totul era deja așa, așa că nu am făcut nicio modificare:

  1. wp_site domain: xyzabc.com path: /

wp_blogs domain: xyzabc.com path: /

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

După cum înțeleg, ați folosi o bară oblică la final dacă aveați setată în configurații.

5 mai 2018 22:16:33
0

Rescrieți fișierul wp-config.php cu acest cod:

define('SUBDOMAIN_INSTALL', false);

în loc de define('SUBDOMAIN_INSTALL', true);

apoi accesați:

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

apoi:

Adăugați următoarele în fișierul .htaccess din /var/www/vhosts/website.com/, înlocuind alte reguli WordPress:

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

# adăugați o bară oblică la final pentru /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]

Gata.

Creați un Site Nou cu Subdirector

15 ian. 2019 10:54:38