将WP Multisite移到子目录


20

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

摘要:

如何将wordpress多站点(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 _#_ 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=$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]

移动网站所需的更新

在我看来,为了将网站移至/ 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/,则应该这样做。太好了


3
好问题,好过程+1
kaiser

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

Answers:


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)

这是非常有用的。我安装了子域,并在站点上进行了数据库转储和压缩。我需要将其还原到新服务器上,并且必须手动更新站点。数据库更新是我需要进行的最必要的更新。谢谢!
雅各布·拉库亚

2

在我看来,您好像已经解决了自己的问题-只需按照步骤1-4进行操作,对于步骤5则更新RewriteBasein .htaccess。为了更新帖子中的路径,我喜欢使用Interconnect IT消毒的搜索和替换工具。


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

是:RewriteBase /blog
牛油果

邦芝 完成,但仍然无法正常工作。上述所有之后,仍然显示“建立数据库连接时出错”。更糟糕的是,我的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_(site#)_ tablesuffix,转到选项表,并将siteurl和home更改为 http://www.sitename.com/blogname

2)从每个blog_id变化wp_blogs域blogname.domain.comdomain.com和路径/blogname/

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

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

瞧!


0

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

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

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

因此,请不要使用子文件夹-我没有!

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

  1. wp_site域:xyzabc.com路径:/

wp_blogs网域:xyzabc.com路径:/

wp_sitemeta网站网址: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

然后:

将以下内容添加到/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$ $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]

而已。

用子目录创建一个新站点

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.