การย้าย WP Multisite ไปยังไดเรกทอรีย่อย


20

ประการแรกฉันได้อ่านบทความ จำนวนมากเกี่ยวกับกระบวนการนี้ อย่างไรก็ตามด้วยเหตุผลต่าง ๆ กระบวนการยังคงใช้งานได้ยากหรือแก้ไขปัญหาเนื่องจากไม่มีตัวอย่างที่เป็นนามธรรมหรืออาจเป็นนามธรรมเกินไป และมีโพสต์ "ไม่สามารถทำ" ได้ไม่กี่โพสต์เกือบจะตามมาด้วย "กับ 3.5 ตอนนี้คุณสามารถ" caveats ดังนั้นไม่ว่าใครจะยังคงคลุมเครือแม้ว่าจะไม่มีข้อสงสัยเล็กน้อย

สรุป:

วิธีย้าย wordpress multisite (WPMS) จาก root.com ไปยัง root / blogs?

สำหรับตัวอย่างนี้เรากำลังย้าย WPMS จาก "root.com" เป็น "root.com/blogs"

ฉันเข้าใจว่าฉันต้องอัพเดตพา ธ ในฐานข้อมูลและ wp-config.php อย่างเหมาะสม ดูเหมือนว่าฉันอาจต้องอัปเดต. htaccess ด้วยหรือไม่ ฉันยังตระหนักถึงปัญหาการทำให้เป็นอนุกรมด้วยการค้นหา / แทนที่และการปรับปรุงแบบสอบถาม MySQL

ฉันมี WPMS ที่ฉันอัปเดตเป็น 3.5 ฉันพบตารางต่อไปนี้พร้อมข้อมูลโดเมนและเส้นทาง

การกำหนดค่าการทำงานที่มีอยู่ก่อนที่จะย้ายไปยังไดเรกทอรีย่อย

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 สอดคล้องกับตารางตัวเลือก wp _ # _ ซึ่งประกอบด้วย:

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. ในwp-config.phpฉันมีบรรทัดเฉพาะ 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. สุดท้ายใน. 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]

จำเป็นต้องมีการอัพเดตเพื่อย้ายเว็บไซต์

สำหรับฉันที่จะย้ายเว็บไซต์ของฉันไปที่ / บล๊อกฉันจะ:

1. อัปเดต wp_blogs เป็น

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. อัปเดต wp_site เป็น

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

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

หมายเหตุ:ฉันไม่ชัดเจนว่าขั้นตอนนี้ได้รับการปรับปรุงอย่างเหมาะสมอย่างไร

5. .htaccess

ฉันพบคำแนะนำ "อัปเดต. htaccess อย่างเหมาะสม" ที่คลุมเครือ แต่ไม่เฉพาะเจาะจง อัปเดต RewriteBase หรือไม่ บรรทัดใดใน. htaccess ที่ฉันอัปเดตเมื่อฉันย้าย root.com ไปที่ root.com/blogs

ที่ขาดหายไปจากกระบวนการข้างต้นจะเป็นเส้นทางที่พบในโพสต์ ผู้ชำนาญการของฉันคือการใช้เครื่องมือค้นหาและแทนที่สำหรับสิ่งนั้นหลังจากฉันได้ทำการปรับปรุงขั้นพื้นฐานเพิ่มเติมนี้แล้ว หรือฉันผิด

อัปเดต bungesheaแนะนำว่าใช่ฉันชี้ RewriteBase ไปยังไดเรกทอรีย่อย "บล็อก" เช่น

RewriteBase /Blogs

ในที่สุดหากคุณไม่ทราบเกี่ยวกับhttp://interconnectit.com/products/search-and-replace-for-wordpress-database/คุณควร มันยอดเยี่ยมมาก


3
เป็นคำถามที่ยอดเยี่ยมกระบวนการที่ยอดเยี่ยม +1
ไกเซอร์

1
มันเป็นแค่ฉันเหรอ? ฉันคิดว่าการสืบค้นในกระบวนการไม่ถูกต้องupdate wp_blogs set domain=concat(domain, '/blogs'), path=concat(path, 'blogs/'); ควรจะเป็นupdate wp_blogs set path=concat('/blogs',path);
MR

คำตอบ:


7

ฉันรู้ว่ามันเก่า แต่ฉันแก้ไข! ฉันติดตั้ง WP MU ในโฟลเดอร์ย่อย 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);

และในฐานข้อมูลของคุณให้แก้ไขสิ่งนี้:

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)

สิ่งนี้มีประโยชน์อย่างไม่น่าเชื่อ ฉันมีโดเมนย่อยติดตั้งและมีการถ่ายโอนฐานข้อมูลและรหัสไปรษณีย์ของเว็บไซต์ ฉันต้องการคืนค่าบนเซิร์ฟเวอร์ใหม่และต้องอัปเดตไซต์ด้วยตนเอง การอัพเดทฐานข้อมูลเป็นสิ่งที่จำเป็นที่สุดที่ฉันต้องทำ ขอขอบคุณ!
Jacob Raccuia

2

ดูเหมือนผมเป็นถ้าคุณได้แก้ไขปัญหาของคุณเอง - แค่ทำตามขั้นตอนของคุณ 1-4 และสำหรับการปรับปรุงขั้นตอนที่ 5 ในRewriteBase .htaccessสำหรับการปรับปรุงเส้นทางในโพสต์ที่ผมชอบใช้การเชื่อมต่อผ่านการฆ่าเชื้อไอทีค้นหาและแทนที่เครื่องมือ


ขอบคุณ bungshea ตามที่ฉันระบุในโพสต์ของฉันอัปเดต RewriteBase เป็นอะไรตามตัวอย่างด้านบน นั่นจะเป็น: RewriteBase / บล็อกหรือไม่
Screenack

ใช่:RewriteBase /blog
เชียม

Bungshea; เสร็จสิ้น แต่ยังไม่ทำงาน ยังคงได้รับ "ข้อผิดพลาดในการสร้างการเชื่อมต่อฐานข้อมูล" หลังจากทั้งหมดข้างต้น ยิ่งกว่านั้นไม่มีข้อผิดพลาดเกิดขึ้นในบันทึกข้อผิดพลาดของ Apache
Screenack

@ Screenack ข้อมูลจำเพาะของ "ข้อผิดพลาดในการสร้างการเชื่อมต่อฐานข้อมูล" คืออะไร? คำแนะนำ: เยี่ยมชมwp-admin
เชีย

1

ตกลงนี่คือสิ่งที่ฉันทำและใช้งานได้ ไม่มีโฟลเดอร์ย่อย ก่อนหน้านี้ไซต์ได้รับการกำหนดค่าเป็นโดเมนย่อย

สำรองข้อมูลแรก !!!

wp-config.php (แทนที่บล็อกนี้ด้วยบล็อกในไฟล์ของคุณ)

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]

ตอนนี้ใน SQL DB:

1) สำหรับแต่ละ wp_ (ไซต์ #) _ tablesuffix ไปที่ตารางตัวเลือกและเปลี่ยน siteurl และกลับไปเป็น http://www.sitename.com/blogname

2) wp_blogs สำหรับแต่ละ blog_id เปลี่ยนโดเมนจากblogname.domain.comเป็นdomain.comและพา ธ เป็น/blogname/

3) ไม่จำเป็นต้องเปลี่ยน wp_options siteurl & home หรือเซลล์ใด ๆ ใน wp_site หรือ wp_sitemeta หากการติดตั้งอยู่ในตำแหน่งเดียวกัน

หลังจากเสร็จแล้วให้ไปที่การตั้งค่า (ในแผงผู้ดูแลระบบ superuser)> ลิงก์ถาวรและคลิกบันทึก

Voila!


0

นี่คือคำตอบแรกของฉันดังนั้นได้โปรดมีน้ำใจ! :)

ฉันไม่มีบล็อกที่อยู่ในโดเมนย่อยที่จะทำการแปลงแล้ว แต่ฉันต้องต่อสู้เพราะมันเป็นบล็อกเก่าและพวกเขาจะไม่ให้ฉันทำบล็อกย่อยและฉันกลัวว่า WP ได้ทำการเปลี่ยนแปลงฐานข้อมูลของฉันเมื่อพวกเขาให้รหัสแก่ฉัน

นี่คือสิ่งที่ใช้ได้ผลสำหรับฉันในเดือนเมษายน 2018 พวก ... ฉันใช้ wp-config จาก hot_barbara และฉันใช้. htaccess จากพวกเขาด้วย

ดังนั้นโปรดอย่าไปที่โฟลเดอร์ย่อย - ฉันไม่ได้!

อย่างไรก็ตามใน SQL DB นี่คือสิ่งที่เกิดขึ้นในกรณีของฉัน - มันเป็นแบบนี้แล้วดังนั้นฉันไม่ได้ทำการเปลี่ยนแปลงใด ๆ :

  1. โดเมน wp_site: เส้นทาง xyzabc.com: /

โดเมน wp_blogs: เส้นทาง xyzabc.com: /

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

ตามที่ฉันเข้าใจคุณจะใช้เครื่องหมายทับต่อท้ายหากคุณมีในการตั้งค่าของคุณ


0

เขียนซ้ำของคุณwp-config.phpด้วยรหัสนี้

define('SUBDOMAIN_INSTALL', false);

แทน define('SUBDOMAIN_INSTALL', true);

จากนั้นไปที่:

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

แล้ว:

เพิ่มสิ่งต่อไปนี้ในไฟล์. htaccess ของคุณใน /var/www/vhosts/website.com/ แทนกฎ 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]

แค่นั้นแหละ.

สร้างไซต์ใหม่พร้อมไดเรกทอรีย่อย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.