Spostamento di un sito WP in una sottodirectory


20

In primo luogo, ho letto un numero di post su questo processo. Tuttavia, per vari motivi, il processo rimane difficile da implementare o risolvere per mancanza di esempi anche astratti o forse troppo astratti. E ci sono alcuni post "impossibile", quasi sempre seguiti da "con 3.5, ora puoi" avvertenze, quindi se uno può rimanere ambiguo, anche se senza dubbio non banale.

Sommario:

Come spostare un sito wordpress (WPMS) da root.com a root / blog?

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 dovrei anche aggiornare .htaccess? Sono anche a conoscenza del problema di serializzazione con gli aggiornamenti di ricerca / sostituzione e query mysql.

Ho un WPMS che ho aggiornato alla 3.5. Ho trovato le seguenti tabelle con informazioni sul dominio e sul percorso

Configurazione di lavoro esistente prima di passare alla 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. blog_id corrisponde alle tabelle delle opzioni wp _ # _ 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 di 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]

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

Aggiornamenti richiesti per spostare il sito

Mi sembra che per spostare il mio sito su / blog, vorrei:

1. Aggiorna 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. Aggiorna 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 _ # _ opzioni

+-------------+--------------------------------+
| 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 sono chiaro come questo passaggio venga opportunamente aggiornato

5. .htaccess

Ho trovato vaghe istruzioni "update .htaccess appropriatamente", ma non specifiche. Aggiorna RewriteBase? Quali righe in .htaccess devo aggiornare quando sposto root.com su root.com/blogs?

Manca il processo di cui sopra saranno i percorsi trovati nei post. I miei druther devono usare lo strumento di ricerca e sostituzione per questo, dopo aver apportato questi aggiornamenti più fondamentali; o mi sbaglio?

Aggiornamento bungeshea suggerisce che, sì, indico RewriteBase alla sottodirectory "blog", ovvero

RewriteBase /Blogs

Infine, se non conosci http://interconnectit.com/products/search-and-replace-for-wordpress-database/ , dovresti. È eccellente


3
Ottima domanda, ottimo processo +1
kaiser

1
Sono solo io? Penso che le domande nel processo non siano corrette update wp_blogs set domain=concat(domain, '/blogs'), path=concat(path, 'blogs/'); dovrebbero piuttosto essereupdate wp_blogs set path=concat('/blogs',path);
MR

Risposte:


7

So che è vecchio ma l'ho risolto! ho installato WP MU in una sottocartella. 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);

e nel tuo database, modifica questo:

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)

questo è stato incredibilmente utile. Ho avuto un'installazione di sottodominio e un dump del database e zip del sito. Ho dovuto ripristinarlo su un nuovo server e ho dovuto aggiornare manualmente il sito. Gli aggiornamenti del database erano quelli più indispensabili che dovevo fare. Grazie!
Jacob Raccuia,

2

Sembra a me come se hai risolto il tuo problema - basta seguire i tuoi passi 1-4, e per il passaggio 5 aggiornamento del RewriteBasein .htaccess. Per aggiornare i percorsi nei post, mi piace usare lo strumento di ricerca e sostituzione sterilizzato di Interconnect IT .


Grazie, bungshea. Come indico nel mio post, aggiorna RewriteBase a cosa, esattamente, come nell'esempio sopra? Sarebbe: RewriteBase / blog?
Screenack

Sì:RewriteBase /blog
karité

Bungshea; fatto, ma ancora non funziona. Ancora dopo aver visualizzato "Errore nello stabilire la connessione al database". Peggio ancora, non ci sono errori nel mio registro degli errori di Apache.
Screenack

@Screenack quali sono le specifiche di "Errore nello stabilire la connessione al database"? Suggerimento: visitawp-admin
shea,

1

Ok, ecco cosa ho fatto e ha funzionato. Nessuna sottocartella. Il sito era precedentemente configurato per sottodominio.

BACKUP PRIMA !!!

wp-config.php (sostituisci questo blocco con il blocco nel tuo file)

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]

ora nel database SQL:

1) per ogni wp_ (site #) _ tablesuffix vai alla tabella delle opzioni e cambia siteurl e home in http://www.sitename.com/blogname

2) wp_blogs per ogni blog_id cambia il dominio da blogname.domain.coma domain.come il percorso a/blogname/

3) non è necessario modificare wp_options siteurl & home o qualsiasi cella in wp_site o wp_sitemeta se l'installazione si trova nella stessa posizione.

Al termine, assicurati di accedere alle impostazioni (nel pannello di amministrazione del superutente)> permalink e fai clic su Salva.

Ecco!


0

Questa è la mia prima risposta, quindi per favore sii premuroso! :)

NON ho fatto un blog che era già in sottodomini per essere convertito. Ma ho dovuto combattere perché era un vecchio blog e non mi permettevano di creare un blog di sottodirectory e temevo che WP avesse apportato modifiche al mio DB quando mi hanno dato i codici da inserire.

Questo è quello che ha funzionato per me nell'aprile 2018 ragazzi ... Ho usato il wp-config di hot_barbara e ho usato anche il .htaccess da loro.

Pertanto, per favore non andare per una sottocartella - non l'ho fatto!

TUTTAVIA, in SQL DB, questo è ciò che è accaduto nel mio caso: era già tutto così, quindi non ho apportato alcuna modifica:

  1. dominio wp_site: percorso xyzabc.com: /

dominio wp_blogs: percorso xyzabc.com: /

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

A quanto ho capito, useresti una barra finale se ce l'hai nelle impostazioni.


0

Riscrivi il tuo wp-config.phpcon questo codice

define('SUBDOMAIN_INSTALL', false);

invece di define('SUBDOMAIN_INSTALL', true);

quindi vai a:

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

poi:

Aggiungi quanto segue al tuo file .htaccess in /var/www/vhosts/website.com/, sostituendo altre regole di 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]

Questo è tutto.

Crea un nuovo sito con la sottodirectory

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.