Spostare un WP Multisite in una sottodirectory
Prima di tutto, ho letto diversi post su questo processo. Tuttavia, per varie ragioni, il processo rimane difficile da implementare o risolvere per mancanza di esempi concreti, o forse troppo astratti. E ci sono alcuni post che dicono "non si può fare", quasi sempre seguiti da note "con la 3.5, ora si può", quindi resta ambiguo se sia possibile, anche se indubbiamente non banale.
Riepilogo:
Come spostare un wordpress multisite (WPMS) da root.com a root/blogs?
Per questo esempio, stiamo spostando un WPMS da "root.com" a "root.com/blogs"
Capisco che devo aggiornare i percorsi nel database e wp-config.php in modo appropriato. Sembra che potrei dover aggiornare anche .htaccess? Sono anche consapevole del problema di serializzazione con la ricerca/sostituzione e gli aggiornamenti delle query mysql.
Ho un WPMS che ho aggiornato alla 3.5. Ho trovato le seguenti tabelle con informazioni su dominio e percorso
Configurazione esistente funzionante prima dello spostamento nella sottodirectory
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. L'ID del blog corrisponde alle tabelle wp_#_options che contengono:
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. Nel mio wp-config.php ho le seguenti righe specifiche per 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. Infine, nel mio .htaccess, ho:
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# file caricati
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]
# aggiunge uno slash finale a /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]
Aggiornamenti necessari per spostare il sito
Mi sembra che per spostare il mio sito in /blogs, dovrei:
1. Aggiornare 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. Aggiornare 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: Non mi è chiaro come questo passaggio venga aggiornato in modo appropriato
5. .htaccess
Ho trovato vaghe istruzioni del tipo "aggiorna .htaccess in modo appropriato", ma niente di specifico. Aggiornare RewriteBase? Quali righe in .htaccess devo aggiornare quando sposto root.com in root.com/blogs?
Mancheranno dal processo sopra i percorsi trovati nei post. Preferisco usare lo strumento di ricerca e sostituzione per questo, dopo aver fatto questi aggiornamenti più fondamentali; o mi sbaglio?
Aggiornamento bungeshea suggerisce che, sì, devo puntare RewriteBase alla sottodirectory "blogs", cioè,
RewriteBase /Blogs
Infine, se non conosci http://interconnectit.com/products/search-and-replace-for-wordpress-databases/ dovresti. È eccellente.
So che è vecchio ma l'ho sistemato! Ho installato WP MU in una sottocartella.
htaccess
:
RewriteEngine On
RewriteBase /YOUR_SUBFOLDER
RewriteRule ^index\.php$ - [L]
# aggiungi uno slash finale a /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'); // oppure il tuo host
define('PATH_CURRENT_SITE', '');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);
e nel tuo database, modifica questo:
wp_site
domain: localhost (OPPURE il tuo dominio ma senza sottocartella!)
path: /
wp_blogs
domain: localhost (OPPURE il tuo dominio ma senza sottocartella in ogni blog_id!)
path: /
wp_sitemeta
siteurl: http://localhost/YOUR_SUBFOLDER (sostituisci localhost con il tuo host)

è stato incredibilmente utile. Avevo un'installazione su sottodominio e un dump del database insieme a un zip del sito. Dovevo ripristinarlo su un nuovo server e ho dovuto aggiornare manualmente il sito. Gli aggiornamenti al database erano quelli più urgenti che dovevo fare. Grazie!

Mi sembra che tu abbia già risolto il tuo problema - ti basta seguire i tuoi passaggi da 1 a 4, e per il passaggio 5 aggiornare RewriteBase
nel file .htaccess
. Per aggiornare i percorsi nei post, personalmente preferisco utilizzare lo strumento Interconnect IT sterilized search-and-replace.

Grazie, bungshea. Come indico nel mio post, aggiornare RewriteBase a cosa, esattamente, secondo l'esempio sopra? Sarebbe: RewriteBase /blog ?

Bungshea; fatto, ma ancora non funziona. Ricevo ancora "Errore durante la connessione al database" dopo tutto quanto sopra. Peggio ancora, non ci sono errori registrati nel mio log degli errori di apache.

Ecco cosa ho fatto e ha funzionato. Nessuna cartella secondaria. Il sito era precedentemente configurato per sottodominio.
PRIMA EFFETTUA UN BACKUP!!!
wp-config.php (sostituisci questo blocco con quello nel tuo file)
define('WP_ALLOW_MULTISITE', true);
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', false);
define('DOMAIN_CURRENT_SITE', 'no-www-in-sitename.com'); // il tuo 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]
# aggiungi una barra finale a /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]
ora nel database SQL:
1) per ogni wp_(sito#)_suffisso_tabella vai nella tabella options e cambia siteurl e home in http://www.sitename.com/blogname
2) in wp_blogs per ogni blog_id cambia il dominio da blogname.domain.com
a domain.com
e il percorso in /blogname/
3) non è necessario modificare siteurl e home in wp_options o qualsiasi cella in wp_site o wp_sitemeta se l'installazione è nella stessa posizione.
Una volta terminato, assicurati di andare (nel pannello amministrativo superuser) in Impostazioni > Permalink e cliccare su Salva.
Voilà!

Questa è la mia prima risposta, quindi per favore siate comprensivi! :)
IO NON avevo un blog che fosse già in sottodomini da convertire. Ma ho dovuto lottare perché era un blog vecchio e non mi permettevano di creare un blog in sottodirectory e temevo che WP facesse modifiche al mio DB nel momento in cui mi avrebbero dato i codici da inserire.
Questo è ciò che ha funzionato per me nell'aprile 2018 ragazzi... Ho usato il wp-config di hot_barbara e ho usato anche il loro .htaccess.
Pertanto, per favore non optate per una sottocartella - io non l'ho fatto!
TUTTAVIA, nel database SQL, ecco cosa è successo nel mio caso - era già tutto così quindi non ho apportato modifiche:
- wp_site dominio: xyzabc.com percorso: /
wp_blogs dominio: xyzabc.com percorso: /
wp_sitemeta siteurl: h**ps://xyzabc.com/
Voi - come ho capito - usereste una barra finale se l'aveste nelle vostre impostazioni.

Riscrivi il tuo file wp-config.php
con questo codice
define('SUBDOMAIN_INSTALL', false);
invece di define('SUBDOMAIN_INSTALL', true);
poi vai a:
http://www.website.com/wp-admin/network/setup.php
quindi:
Aggiungi quanto segue al tuo file .htaccess in /var/www/vhosts/website.com/, sostituendo le altre regole di WordPress:
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# aggiungi una barra finale a /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]
Questo è tutto.
Crea un Nuovo Sito con Sottodirectory
