首先,我阅读了有关此过程的许多文章。但是,由于各种原因,由于缺乏甚至是抽象的示例,也可能是过于抽象的示例,该过程仍然难以实施或排除故障。并且有一些“不能做”的帖子,几乎总是跟着“有了3.5,现在可以了”的警告,因此是否可以保持模棱两可,尽管无疑是不平凡的。

摘要:

如何从root.com移动wordpress多站点(WPMS)?

对于此示例,我们从“ root.com”移动WPMS到“ 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 _#_ options表,其中包含:

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= [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule  ^[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*)  [L]
RewriteRule  ^[_0-9a-zA-Z-]+/(.*\.php)$  [L]
RewriteRule . index.php [L]


移动站点所需的更新

在我看来,要移动站点我的网站到/ blogs,我将:

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


注意:我不清楚如何适当地更新此步骤

5。 .htaccess

我发现模糊的“适当更新.htaccess”说明,但没有具体说明。更新RewriteBase?当我将root.com移至root.com/blogs时,要更新的.htaccess中的哪几行?

上述过程中缺少的是帖子中找到的路径。在做出更基本的更新之后,我的德鲁特人将为此使用搜索和替换工具。还是我错了?

更新bungeshea建议,是的,我将RewriteBase指向“博客”子目录,即

RewriteBase /Blogs


最后,如果您不了解http://interconnectit.com/products/search-and-replace-for-wordpress-databases/,则应该这样做。非常好。

评论

好问题,好过程+1

只有我吗?我认为,该过程中的查询是不正确的更新wp_blogs set domain = concat(domain,'/ blogs'),path = concat(path,'blogs /');应该更新wp_blogs set path = concat('/ blogs',path);

#1 楼

我知道它很旧,但我已将其修复!我在一个子文件夹中安装了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$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*)  [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$  [L]
RewriteRule ^(.*\.php)$ YOUR_SUBFOLDER/ [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)


评论


这是非常有用的。我有一个子域安装以及该站点的数据库转储和zip。我需要将其还原到新服务器上,并且必须手动更新站点。数据库更新是我需要进行的最必要的更新。谢谢!

–雅各布·拉库亚(Jacob Raccuia)
16-10-13在3:56

#2 楼

在我看来,您好像已经解决了自己的问题-只需执行步骤1-4,然后在步骤5中更新RewriteBase中的.htaccess即可。为了更新帖子中的路径,我喜欢使用Interconnect IT消毒的搜索和替换工具。

评论


谢谢,邦希正如我在帖子中所指出的,按照上面的示例,将RewriteBase更新为确切的内容是什么?会是:RewriteBase / blog吗?

– Screenack
13年1月2日,14:05



是:RewriteBase / blog

–乳木果
13年1月2日在21:41

邦芝完成,但仍然无法正常工作。上述所有之后,仍然显示“建立数据库连接时出错”。更糟糕的是,我的apache错误日志中没有错误。

– Screenack
13年1月4日在17:10

@Screenack“建立数据库连接错误”的细节是什么?提示:访问wp-admin

–乳木果
2013年9月1日下午6:30

#3 楼

好的,这就是我所做的,并且可以正常工作。没有子文件夹。站点先前已配置为子域。

首先备份!!!

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$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*)  [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$  [L]
RewriteRule . index.php [L]


现在在SQL DB中:

1)每个wp_( site#)_ tablesuffix转到选项表,并将siteurl更改为http://www.sitename.com/blogname

2)每个blog_id的wp_blogs将域从blogname.domain.com更改为domain.com,并将路径更改为/blogname/

3 )如果安装位置在同一位置,则无需更改wp_options siteurl和home或wp_site或wp_sitemeta中的任何单元。

完成后,请务必转到(在超级用户管理面板中)设置>永久链接,然后单击保存。

Voila!

评论


博客名称路径中的斜线确实解决了我的问题😬

–埃德加
20-2-4在18:26

#4 楼

这是我的第一个答案,请体谅! :)

我没有一个已经在子域中进行转换的博客。但是我不得不打仗,因为这是一个老博客,他们不允许我创建子目录博客,而且我担心WP在给我要输入的代码时会对我的数据库进行更改。

这就是2018年4月对我有用的...我使用了hot_barbara的wp-config,我也使用了它们的.htaccess。

因此,请不要去找一个子文件夹-我没有!

但是,在SQL DB中,这就是我的情况-事情就已经这样了,所以我没有做任何更改:


wp_site
域名:xyzabc.com
路径:/

wp_blogs
域名:xyzabc.com
路径:/

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

-据我了解,如果您在设置中使用了斜杠,则会使用斜杠。

#5 楼

使用此代码重写您的wp-config.php

define('SUBDOMAIN_INSTALL', false);

define('SUBDOMAIN_INSTALL', true);

然后转到:


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



然后:

将以下内容添加到/var/www/vhosts/website.com/中的.htaccess文件中,以替换其他WordPress规则:

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*)  [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$  [L]
RewriteRule . index.php [L]


就这样。


用子目录创建新站点