Mutarea unui WP Multisite într-un subdirector
Î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.
Ș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)

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!

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.

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 ?

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.

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!

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:
- 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.

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
