Di chuyển WP Multisite sang thư mục con


20

Đầu tiên, tôi đã đọc một số bài viết về quá trình này. Tuy nhiên, vì nhiều lý do, quá trình này vẫn khó thực hiện hoặc khắc phục sự cố do thiếu các ví dụ thậm chí trừu tượng hóa hoặc có thể quá trừu tượng. Và có một vài bài viết "không thể làm", gần như luôn được theo dõi bởi "với 3,5, bây giờ bạn có thể" hãy cẩn thận, vì vậy liệu người ta có thể vẫn mơ hồ, mặc dù không nghi ngờ gì là không tầm thường.

Tóm lược:

Làm cách nào để di chuyển một wordpress multisite (WPMS) từ root.com sang root / blog?

Trong ví dụ này, chúng tôi đang chuyển WPMS từ "root.com" sang "root.com/bloss"

Tôi hiểu rằng tôi cần cập nhật các đường dẫn trong cơ sở dữ liệu và wp-config.php một cách thích hợp. Có vẻ như tôi cũng có thể phải cập nhật .htaccess? Tôi cũng nhận thức được vấn đề tuần tự hóa với các cập nhật truy vấn / tìm kiếm và mysql.

Tôi có một WPMS mà tôi đã cập nhật lên 3.5. Tôi đã tìm thấy các bảng sau với thông tin tên miền và đường dẫn

Cấu hình làm việc hiện có trước khi chuyển sang thư mục con

1. wp_bloss

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 tương ứng với các bảng tùy chọn wp _ # _ có chứa:

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. Trong wp-config.php của tôi, tôi có các dòng dành riêng cho 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. Cuối cùng, trong .htaccess của tôi , tôi có:

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]

Yêu cầu cập nhật để di chuyển trang web

Dường như với tôi rằng để chuyển trang web của tôi đến / blog, tôi sẽ:

1. Cập nhật wp_bloss lên

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. Cập nhật wp_site lên

update wp_site set domain=concat(domain, '/blogs'), path=concat(path, 'blogs/');
select * from  wp_site;
+----+-------------+------------+
| id | domain      | path       |
+----+-------------+------------+
|  1 | root.com    | /blogs/    |
+----+-------------+------------+

3. tùy chọn 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 );

lưu ý: Tôi không rõ làm thế nào bước này được cập nhật một cách thích hợp

5. .acaccess

Tôi tìm thấy hướng dẫn "cập nhật .htaccess thích hợp" mơ hồ, nhưng không cụ thể. Cập nhật RewriteBase? Những dòng nào trong .htaccess để tôi cập nhật khi tôi chuyển root.com sang root.com/bloss?

Thiếu từ quá trình trên sẽ là các đường dẫn được tìm thấy trong bài viết. Công cụ tìm kiếm của tôi là sử dụng công cụ tìm kiếm và thay thế cho điều đó, sau khi tôi thực hiện bản cập nhật cơ bản hơn này; hoặc là tôi sai?

Cập nhật bungeshea gợi ý rằng, vâng, tôi trỏ RewriteBase đến thư mục con "blog", nghĩa là,

RewriteBase /Blogs

Cuối cùng, nếu bạn không biết về http://interconnectit.com/products/search-and-replace-for-wordpress-database/ bạn nên. Nó là tuyệt vời.


3
Câu hỏi tuyệt vời, quá trình tuyệt vời +1
kaiser

1
Chỉ tôi thôi à? Tôi nghĩ rằng, các truy vấn trong quy trình không chính xác update wp_blogs set domain=concat(domain, '/blogs'), path=concat(path, 'blogs/'); nên thayupdate wp_blogs set path=concat('/blogs',path);
MR

Câu trả lời:


7

Tôi biết nó đã cũ nhưng tôi đã sửa nó! tôi đã cài đặt WP MU trong thư mục con. 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);

và trong cơ sở dữ liệu của bạn, sửa đổi điều này:

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)

Điều này là vô cùng hữu ích. Tôi đã có một cài đặt tên miền phụ và kết xuất cơ sở dữ liệu và zip của trang web. Tôi cần khôi phục nó trên một máy chủ mới và phải cập nhật thủ công trang web. Các bản cập nhật cơ sở dữ liệu là những thứ bắt buộc nhất mà tôi cần phải thực hiện. Cảm ơn bạn!
Jacob Raccuia

2

Có vẻ với tôi như thể bạn đã giải quyết vấn đề của riêng bạn - chỉ cần làm theo các bước của bạn 1-4, và cho bước 5 cập nhật các RewriteBasetrong .htaccess. Để cập nhật các đường dẫn trong bài viết, tôi thích sử dụng công cụ tìm kiếm và thay thế tiệt trùng Interconnect IT .


Cảm ơn, bungshea. Như tôi đã chỉ ra trong bài viết của mình, hãy cập nhật RewriteBase thành gì, chính xác, theo ví dụ trên? Đó sẽ là: RewriteBase / blog?
Màn hình

Có:RewriteBase /blog
shea

Bungshea; xong, nhưng vẫn không hoạt động. Vẫn nhận được "Lỗi thiết lập kết nối cơ sở dữ liệu" sau tất cả những điều trên. Tệ hơn, không có lỗi ném vào nhật ký lỗi apache của tôi.
Chiếu phim

@Screenack các chi tiết cụ thể của "Lỗi thiết lập kết nối cơ sở dữ liệu" là gì? Gợi ý: ghé thămwp-admin
shea

1

Ok đây là những gì tôi đã làm và điều này đã làm việc. Không có sub_folder. Trang web trước đây được cấu hình để tên miền phụ.

TRỞ LẠI ĐẦU TIÊN !!!

wp-config.php (thay thế khối này bằng khối trong tệp của bạn)

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]

bây giờ trong SQL DB:

1) cho mỗi wp_ (trang web #) _ framesuffix đi đến bảng tùy chọn và thay đổi trang web và trang chủ thành http://www.sitename.com/blogname

2) wp_bloss cho mỗi blog_id thay đổi tên miền từ blogname.domain.comđến domain.comvà đường dẫn đến/blogname/

3) không cần thay đổi trang web wp_options & home hoặc bất kỳ ô nào trong wp_site hoặc wp_sitemeta nếu cài đặt ở cùng một vị trí.

Sau khi hoàn thành, hãy chắc chắn đi đến (trong bảng quản trị siêu người dùng)> permalinks và nhấp vào lưu.

Voila!


0

Đây là câu trả lời đầu tiên của tôi vì vậy hãy ân cần! :)

Tôi KHÔNG có một blog đã có tên miền phụ để được chuyển đổi. Nhưng tôi đã phải chiến đấu vì đó là một blog cũ và họ sẽ không cho tôi tạo một blog thư mục con và tôi sợ rằng WP đã thay đổi DB của tôi vào thời điểm họ đưa cho tôi mã số để đưa vào.

Đây là những gì làm việc cho tôi vào tháng 4 năm 2018 ... Tôi đã sử dụng wp-config từ hot_barbara và tôi cũng đã sử dụng .htaccess từ họ.

Vì vậy, xin vui lòng không đi thư mục con - Tôi đã không làm!

TUY NHIÊN, trong SQL DB, đây là điều đã xảy ra trong trường hợp của tôi - tất cả đã diễn ra theo cách này vì vậy tôi đã không thực hiện bất kỳ thay đổi nào:

  1. tên miền wp_site: đường dẫn xyzabc.com: /

tên miền wp_bloss: đường dẫn xyzabc.com: /

trang web wp_sitemeta: h ** ps: //xyzabc.com/

Bạn sẽ - theo tôi hiểu - sẽ sử dụng dấu gạch chéo nếu bạn có nó trong cài đặt của mình.


0

Viết lại của bạn wp-config.phpvới mã này

define('SUBDOMAIN_INSTALL', false);

thay vì define('SUBDOMAIN_INSTALL', true);

sau đó đi đến:

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

sau đó:

Thêm phần sau vào tệp .htaccess của bạn trong /var/www/vhosts/website.com/, thay thế các quy tắc WordPress khác:

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]

Đó là nó.

Tạo một trang web mới với thư mục con

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.