通过“站点网络”将WordPress网站从根目录转移到次目录的办法

On

Update

In

直接将博客搭建在域名的主目录里,这种做法适合个人建站的大多数情况。我此前也是这么做的。不过由于我个人遭遇到发布英文内容的需要,而中文内容和英文内容又必须分离,所以我决定在原来的域名下面建立两个次目录,一个是/cn,一个是/en。原来的博客迁移到/cn,而原来的主域名打算作为一个个人主页或个人导航站使用。

我采用的办法是使用WordPress自带的“站点网络”功能。所以,要做的事情主要是两个,一个是开启“站点网络”功能及其次目录模式,另一个是迁移。

本人使用的LNMP环境搭建的博客,以下办法可能不适合你的情况。如果你想尝试跟着做,请一定记得先备份数据,不要心存任何侥幸心理。我也不能确定以下做法是不是完全正确或周全,如有疏漏还请诸位指正。

开启“站点网络”功能

(本节内容参考了这篇教程

编辑你的网站的 wp-config.php 文件,找到以下这一行:

/* That's all, stop editing! Happy blogging. */

在这一行的上面添加以下内容:

/** Multisite */
define('WP_ALLOW_MULTISITE', true);

保存退出。在浏览器刷新你的网站的管理后台,点击“工具”-“网络配置”或“网络设置”。

这时它会提醒你暂时禁用所有插件。

然后可能会让你选择是次目录模式还是次域名模式,不过有时候也会不提供选项,而只是让你使用次域名,因为你并没有进行全新安装。但实际上你还是可以强制开启次目录模式。无论如何,点击“安装”。

进入下一个页面后,再来编辑 wp-config.php。由于我开启的是子目录模式,所以就在刚刚添加的那两行代码下面跟着添加以下内容,这些内容WordPress也会提示。如果你是想开启子域名,那么请按照它的提示输入。注意,把 ‘yourdomain.com’改成你自己的域名:

define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', false);
define('DOMAIN_CURRENT_SITE', 'yourdomain.com');
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);

保存退出。

接着还需要修改网站的Nginx配置文件(如果您使用的不是Nginx,或者您开启的是次域名模式,请查找其他教程),需要在适当的位置加入以下内容:

# Multisite subdirectory mode only (subdomains mode works by default)
# uncomment following if-block only if you are running a WordPress multisite under subdirectories
if (!-e $request_filename) {
  rewrite /wp-admin$ $scheme://$host$uri/ permanent;
  rewrite ^(?!^/my-db-admin)(/[^/]+)?(/wp-.*) $2 last;
  rewrite ^(?!^/my-db-admin)(/[^/]+)?(/.*.php) $2 last;
}

保存,退出,重启Nginx或LNMP。

在浏览器刷新你的网站的管理后台,这时站点网络功能已经开启了,而且子目录模式也开启了。

接下来的事情就很简单了,在管理后台按照你的需要开启子站点即可。每一个子站点都会有自己的管理后台,它们跟主站点的管理后台是分离的,不过插件和主题的安装权限在站点网络的管理后台那里。

迁移到子目录

由于WordPress的各种第三方迁移插件,要么免费版不支持多站点,要么根本不支持多站点,所以这种迁移操作无法通过插件实现。而WordPress自带的备份恢复功能虽然可以,但并不完整。所以迁移基本上只能靠手动操作,但好在操作其实很简单。我没有找到这方面很好的教程。

进入网站的phpmyadmin页面,查看网站数据库,会发现这时一些新文件夹已经创建出来了。“wp_”前缀的文件夹是主站点和站点网络的数据库文件夹,“wp_2_”前缀的文件夹是你创建的第一个分站点的数据库文件夹,“wp_3_”前缀的文件夹是你创建的第二个分站点的数据库文件夹,以此类推。(但请注意,如果你创建了一个分站点后把它删了,然后又重新创建了一个分站点,即便域名完全一样,那么这个分站点的数据库也不会是“wp_2_”,而是“wp_3_”,以此类推。可见,删除一个分站点,并不会完全消除站点网络对它的记忆。)

总而言之,现在的任务是把“wp_”前缀的相关数据库文件夹里的文件换到“wp_2_”(或者其他你想迁移的分站点的数据库文件夹),这里办法当然很多。我采用的办法是直接重新命名文件夹,也就是把“wp_2_”前缀文件夹重命名为“wp_”,把“wp_”前缀文件夹重命名为“wp_2_”。

有以下文件夹需要相互做这样的操作,其他的不要动:

_term_taxonomy_term_relationships_termmeta
_terms_posts_postmeta
_comments_commentmeta

重命名过程中,要先找一个过渡的临时名称,不要直接重命名过去,这样会造成冲突。

你也可以通过其他诸如导出导入之类的传统的办法。

这些操作完成后,还需要把迁移好的数据库文件里面包含主域名的某些数值修改为子目录的域名。比如,要把”AAA.com“修改为”AAA.com/BB”。这方面的教程很多,但请注意,迁移子目录的情况要修改的范围是相对有限的,所以不能照搬网上的迁移教程。

以下是我使用的sql命令,请把相关域名改成自己需要修改的域名,注意这里修改的是“ wp_2_”前缀的文件夹:

UPDATE wp_2_posts SET post_content = replace(post_content, 'AAA.com', 'AAA.com/BB');
UPDATE wp_2_comments SET comment_content = REPLACE (comment_content, 'AAA.com', 'AAA.com/BB');
UPDATE wp_2_comments SET comment_author_url = REPLACE (comment_author_url, 'AAA.com','AAA.com/BB');

我不能确定这是不是周全的。但无论如何wp_content这个文件夹是既不需要搬迁,也不需要修改域名的。

结语

这样,整个迁移工程就基本完成了。接下来就是一些小修小补的遗留工作,但应该都可以在管理后台解决,包括重新开启插件,设置原来文章链接的重定向,等等。

如果你想做的事情是把网站从次目录搬到根目录,那跟着这个教程反过来做即可。

最新文章

相关文章


订阅评论
提醒
guest

4 Comments
最旧
最新
内联反馈
查看所有评论
皇家元林
1 年 前

之前用过这种方法管理两个站,后来感觉太复杂了,直接独立反而好用。

林海草原
1 年 前

这好像是从便捷性和安全性来说最简单的办法。好在wp是免费的,文档也全面。对于按小时付费的博客程序movabletype来说,多站点管理模式相对更便捷一些,但费用么,啧啧。


了解 心的道理 的更多信息

Subscribe to get the latest posts sent to your email.