Spostare un WP Multisite in una sottodirectory

21 dic 2012, 21:28:01
Visualizzazioni: 26.5K
Voti: 22

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.

3
Commenti

Ottima domanda, ottimo processo +1

kaiser kaiser
10 feb 2013 14:19:54

Sono solo io? Penso che le query nel processo non siano corrette update wp_blogs set domain=concat(domain, '/blogs'), path=concat(path, 'blogs/'); dovrebbe essere piuttosto update wp_blogs set path=concat('/blogs',path);

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

Funziona. In /wp-admin a prima vista sembra rotto perché gli script/css non si caricano, ma ho risolto inserendo define('CONCATENATE_SCRIPTS', false); in wp-config.php

nicogaldo nicogaldo
3 mar 2022 00:42:22
Tutte le risposte alla domanda 5
2

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)
3 giu 2015 17:06:40
Commenti

è 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!

Jacob Raccuia Jacob Raccuia
13 ott 2016 06:56:56

all'inizio sembrava funzionare per me, ma nella chiamata a get_sites() e ottenere l'url non mostra la sottocartella

nicogaldo nicogaldo
3 mar 2022 00:31:55
4

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.

28 dic 2012 09:09:30
Commenti

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

Screenack Screenack
2 gen 2013 16:05:43

Sì: RewriteBase /blog

shea shea
2 gen 2013 23:41:57

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.

Screenack Screenack
4 gen 2013 19:10:23

@Screenack quali sono i dettagli specifici di "Errore nella connessione al database"? Suggerimento: visita wp-admin

shea shea
1 set 2013 09:30:24
1

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à!

20 nov 2015 21:03:58
Commenti

Quella barra finale nel percorso dei nomi dei blog ha davvero risolto i miei problemi

Edgar Edgar
4 feb 2020 20:26:43
0

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:

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

5 mag 2018 22:16:33
0

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

15 gen 2019 10:54:38