WordPress用子目录形式在Nginx服务器配置多站点(Multisite)的流程和避坑

本站所有文章均为博主人工写作,绝无AI辅助成分,请放心参阅。

写在前面,WordPress多站点并不适合初学者,而对于熟悉WordPress开发的人来说,也应该慎用。WordPress多站点本身是一个比较理想化的解决方案,它在某些维度上简化了拥有多个网站的站长的管理流程,节约了服务器的空间;但它也增加了一层系统结构上的复杂度,使你在操作网站搬家、迁入等大的维护工作的时候容易踩坑。比如对于数据库,如果是单个WordPress网站搬家,我通常只要直接导出数据库就行了,而对于多站点中的子站点就需要做一些额外工作了。本文只讨论WordPress多站点的建立流程,因为我最近正好又为一位客户实施了一次,可以完整滴梳理一下实施过程和容易出错的地方。

WordPress多站点有两种形式,子域名和子目录。这次要配置的是子目录形式,也就是站点一是abc.com/site1 ; 站点二是abc.com/site2 这种形式。

首先,到原站点的设置 – 常规 页面中,把站点地址由原来的 abc.com形式,添加你需要的子目录名,变为 abc.com/site1,并保存设置。此时你访问 abc.com,浏览器会自动跳转到 abc.com/site1 。

第二步,在网站根目录的wp-config.php配置文件中添加一行:
define( 'WP_ALLOW_MULTISITE', true );

第三步,安装插件 NGINX Helper。这个插件会提供网站子目录的map文件和服务器配置参数,很重要。

第四步,禁用所有已经激活的插件。WordPress多站点开启之前会提示你要禁用所有插件,所以这一步没有人会漏的。注意是禁用(deactive)插件,不是删除插件。

第五步,来到工具设置菜单下,会多出一个网络设置(Network Setup)页面,其中给出了几行配置代码,也黏贴到wp-config.php下。
特别需要注意,图上圈出来的这个参数,要把‘/site1/’ 改成‘/’。这是我碰到的一个踩坑点。如果不做此修改,你进入多站的管理页面会报404错误。

更新完毕wp-config.php后,再刷新网站后台,就能看到WordPress多站的提示了,你可以开始添加子站点了。

第六步,来到站点管理页面,添加新的站点。

添加完毕后,理论上你就可以通过 abc.com/site2 访问你的第二个网站了,但是你打开网站通常发现页面无法正常运行,不是这个文件地址链接不对,就是那个页面出现了404报错。这就是在Nginx上常发生的WordPress多站配置问题,需要通过修改vhost文件解决。

第七步,到多站管理下,现在可以激活之前你正在用的那些插件了,包括刚刚新安装的NGINX Helper。找到设置 – NGINX Helper页,记下Nginx映射路径文件的地址:

第八步,找到服务器上这个网站的vhost文件,添加以下代码:
第一段代码,添加在vhost文件的开头。注意第三行就是上一步的Nginx映射路径文件的地址

map $http_host $blogid {
    default 0;
    include /home/wwwroot/abc.com/wp-content/uploads/nginx-helper/map.conf;
}

第二段代码,添加在站点server模块内:

        #location / {
        #    try_files $uri $uri/ /index.php?$args;
        #}
        location ~ ^/files/(.*)$ {
            try_files /wp-content/blogs.dir/$blogid/$uri /wp-includes/ms-files.php?file=$1 ;
            access_log off; log_not_found off; expires max;
        }
        location ^~ /blogs.dir {
            internal;
            alias /home/wwwroot/abc.com/wp-content/blogs.dir ;
            access_log off; log_not_found off;      expires max;
        }
        if (!-e $request_filename) {
            rewrite /wp-admin$ $scheme://$host$uri/ permanent;
            rewrite ^/[_0-9a-zA-Z-]+(/wp-.*) $1 last;
            rewrite ^/[_0-9a-zA-Z-]+(/.*\.php)$ $1 last;
        }

注意以上这段代码前三行我进行了注释,因为我用的是lnmp环境,在每个vhost文件中会提供wordpress通用rewrite规则的引用,我看到了我的vhost文件有一行“include rewrite/wordpress.conf;” ,于是把上面前三行注释掉了,否则Nginx会报错,如果你的vhost没有引用wordpress.conf文件,则要把注释解除。

重新保存vhost文件后,重启以下Ngnix服务。自此,第二个子网站才能正常运行。

最后,本文截图和代码中的 abc.com 只是参考域名,具体实施的时候你肯定要换上自己的域名啦,这算是一个并非对所有人都有必要的友情提醒吧!

以上就是WordPress用子目录形式在Nginx服务器配置多站点的详细步骤了。如果你的多站点是子域名的形式,则此流程不适用,等下次实施子域名多站后我再记录下流程吧。这篇文章并不是网络上其他实施WordPress多站点步骤的简单重复,因为那些文章大都已经过时,按照他们的流程配置网站并不能顺利运行,如果你踩坑,按照本文的步骤来做,应该都能顺利解决。

最后的最后,唠叨下,在多站点形式下,一部分开发质量不怎么样的插件会有bug,因为很多插件并没有在WordPress多站环境下好好测试过就上架了。那些动不动就装了几十个插件,功能全堆插件做起来的网站尤其要小心,如果不是不得已,就别用多站点了。

本站所有文章均为原创,欢迎转载,请注明文章出处:https://blog.brain1981.com/2957.html。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。

关注我们的微信公众号-JennyStudio 本站记录了近几年的工作中遇到的一些技术问题和解决过程,“作品集”还收录了本人的大部分作品展示。除了本博客外,我们的工作室网站 – JennyStudio,内有更多作品回顾和展示。
您也可以扫描左边的二维码,关注我们的微信公众号,在微信上查看我们的案例。

4 关于 “WordPress用子目录形式在Nginx服务器配置多站点(Multisite)的流程和避坑” 的评论

    1. Brain 文章作者

      我不是专业写教程的哈,所以通常是自己项目实施过的东西会整理记录成博客,而不是凭空去写没有实施过的东西。所以子域名的文章我会在实际部署过项目后再写,但WP多站本身应用得就很少,下次实施在什么时候很难说。

      回复
  1. 跑来跑去

    我弄了两天,为了弄个多语言。。。开始用polylang来做,wordpress 6.3 又全是问题,后面想多站点,直接来个重定向问题,找到你这个文章,知道要这么配置了。阿里云又不支持map 和 server写法,不好咋搞了。。。

    回复
    1. Brain 文章作者

      不理解你的阿里云怎么会不支持,Nginx不可能不连vhost文件都不能改的,除非你用的是虚拟主机,那样肯定是不适合建多站点的了。

      回复

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注