Verschieben einer WP Multisite in ein Unterverzeichnis


20

Erstens habe ich eine Reihe von Beiträgen zu diesem Prozess gelesen . Aus verschiedenen Gründen bleibt der Prozess jedoch schwierig zu implementieren oder zu beheben, da nicht einmal abstrahierte Beispiele vorliegen oder möglicherweise zu abstrahiert sind. Und es gibt ein paar "kann nicht" -Postings, fast immer gefolgt von "mit 3.5 können Sie jetzt" -Einschränkungen, also ob man mehrdeutig bleiben kann, obwohl zweifellos nicht trivial.

Zusammenfassung:

Wie verschiebe ich eine WordPress-Multisite (WPMS) von root.com nach root / blogs?

In diesem Beispiel verschieben wir ein WPMS von "root.com" nach "root.com/blogs".

Ich verstehe, dass ich die Pfade in der Datenbank und in wp-config.php passend aktualisieren muss. Es scheint, dass ich möglicherweise auch .htaccess aktualisieren muss? Ich bin mir auch des Serialisierungsproblems beim Suchen / Ersetzen und Aktualisieren von MySQL-Abfragen bewusst.

Ich habe ein WPMS, das ich auf 3.5 aktualisiert habe. Ich habe die folgenden Tabellen mit Domain- und Pfadinformationen gefunden

Bestehende Arbeitskonfiguration, bevor Sie in das Unterverzeichnis wechseln

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. Die blog_id entspricht den wp _ # _ -Optionstabellen, die enthalten:

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. In meiner wp-config.php habe ich die folgenden WPMS-spezifischen Zeilen:

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. Schließlich habe ich in meinem .htaccess :

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]

Aktualisierungen, die zum Verschieben der Site erforderlich sind

Es scheint mir, dass ich, um meine Website in die / Blogs zu verschieben, Folgendes tun würde:

1. Aktualisieren Sie wp_blogs auf

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. Aktualisieren Sie wp_site auf

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

Anmerkung: Mir ist nicht klar, wie dieser Schritt angemessen aktualisiert wird

5. Zugang

Ich fand vage "Update .htaccess angemessen" Anweisungen, aber keine Besonderheiten. RewriteBase aktualisieren? Welche Zeilen in .htaccess aktualisieren Sie, wenn Sie root.com auf root.com/blogs verschieben?

Bei dem obigen Vorgang fehlen die Pfade, die in Posts gefunden wurden. Meine Druthers sollen das Suchen und Ersetzen-Tool dafür verwenden, nachdem ich diese grundlegenderen Aktualisierungen vorgenommen habe; oder liege ich falsch?

Update bungeshea schlägt vor, dass ich RewriteBase auf das Unterverzeichnis "blogs" zeige, dh

RewriteBase /Blogs

Wenn Sie nicht über http://interconnectit.com/products/search-and-replace-for-wordpress-databases/ Bescheid wissen , sollten Sie dies tun . Es ist exzellent.


3
Tolle Frage, toller Prozess +1
Kaiser

1
Bin es nur ich Ich denke, Abfragen im Prozess update wp_blogs set domain=concat(domain, '/blogs'), path=concat(path, 'blogs/'); sollten eher nicht korrekt seinupdate wp_blogs set path=concat('/blogs',path);
MR

Antworten:


7

Ich weiß, dass es alt ist, aber ich habe es behoben! Ich habe WP MU in einem Unterordner installiert. 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);

und ändern Sie dies in Ihrer Datenbank:

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)

das war unglaublich hilfreich. Ich hatte eine Subdomain installiert und einen Datenbank-Dump und eine Zip-Datei der Site. Ich musste es auf einem neuen Server wiederherstellen und die Site manuell aktualisieren. Die Datenbankaktualisierungen waren die dringendsten, die ich durchführen musste. Vielen Dank!
Jacob Raccuia

2

Es scheint mir , als ob Sie Ihr eigenes Problem gelöst haben - nur Ihre Schritte 1-4, folgen und für die Aktualisierung Schritt 5 die RewriteBasein .htaccess. Zum Aktualisieren der Pfade in Posts verwende ich gerne das von Interconnect IT sterilisierte Tool zum Suchen und Ersetzen .


Danke, Bungshea. Wie ich in meinem Post angegeben habe, aktualisiere RewriteBase auf was genau, wie im obigen Beispiel? Wäre das: RewriteBase / Blog?
Screenack

Ja:RewriteBase /blog
Shea

Bungshea; getan, aber immer noch nicht funktioniert. Immer noch "Fehler beim Herstellen der Datenbankverbindung" nach all den oben genannten. Schlimmer noch, es werden keine Fehler in mein Apache-Fehlerprotokoll geworfen.
Screenack

@Screenack Was sind die Besonderheiten von "Fehler beim Herstellen der Datenbankverbindung"? Tipp: Besuchen Siewp-admin
Shea

1

Ok, hier ist was ich getan habe und das hat funktioniert. Kein Unterordner. Die Site war zuvor für die Unterdomäne konfiguriert.

ERSTE SICHERUNG !!!

wp-config.php (ersetze diesen Block durch den Block in deiner Datei)

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

.zugang

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]

jetzt in der SQL DB:

1) Wechseln Sie für jedes wp_ (site #) _ tablesuffix zur Optionstabelle und ändern Sie siteurl und home zu http://www.sitename.com/blogname

2) wp_blogs für jede blog_id ändern die Domain von blogname.domain.comnach domain.comund den Pfad nach/blogname/

3) Keine Notwendigkeit, wp_options siteurl & home oder Zellen in wp_site oder wp_sitemeta zu ändern, wenn sich die Installation am selben Ort befindet.

Wenn Sie fertig sind, gehen Sie zu Einstellungen> Permalinks (im Superuser-Admin-Bereich) und klicken Sie auf Speichern.

Voila!


0

Dies ist meine erste Antwort, sei also bitte rücksichtsvoll! :)

Ich hatte KEIN Blog, das sich bereits in zu konvertierenden Subdomains befand. Aber ich musste kämpfen, weil es ein altes Blog war und sie mich kein Unterverzeichnis-Blog machen ließen, und ich befürchtete, dass WP Änderungen an meiner DB vornahm, als sie mir die Codes zum Einfügen gaben.

Das hat bei mir im April 2018 funktioniert, Leute ... Ich habe die wp-config von hot_barbara und den .htaccess auch von ihnen verwendet.

Bitte suchen Sie daher keinen Unterordner - das habe ich nicht getan!

In der SQL-Datenbank ist dies jedoch in meinem Fall geschehen - alles war bereits so, sodass ich keine Änderungen vorgenommen habe:

  1. wp_site domain: xyzabc.com pfad: /

wp_blogs domain: xyzabc.com pfad: /

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

Sie würden - wie ich verstehe - einen abschließenden Schrägstrich verwenden, wenn Sie ihn in Ihren Einstellungen hätten.


0

Schreiben Sie Ihren wp-config.phpCode mit diesem

define('SUBDOMAIN_INSTALL', false);

anstatt define('SUBDOMAIN_INSTALL', true);

dann geh zu:

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

dann:

Fügen Sie Ihrer .htaccess-Datei in /var/www/vhosts/website.com/ Folgendes hinzu, wobei Sie andere WordPress-Regeln ersetzen:

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]

Das ist es.

Erstellen Sie eine neue Site mit Unterverzeichnis

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.