写在前面,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。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。
您也可以扫描左边的二维码,关注我们的微信公众号,在微信上查看我们的案例。
子域名的文章啥时候发呀 大佬
我不是专业写教程的哈,所以通常是自己项目实施过的东西会整理记录成博客,而不是凭空去写没有实施过的东西。所以子域名的文章我会在实际部署过项目后再写,但WP多站本身应用得就很少,下次实施在什么时候很难说。
我弄了两天,为了弄个多语言。。。开始用polylang来做,wordpress 6.3 又全是问题,后面想多站点,直接来个重定向问题,找到你这个文章,知道要这么配置了。阿里云又不支持map 和 server写法,不好咋搞了。。。
不理解你的阿里云怎么会不支持,Nginx不可能不连vhost文件都不能改的,除非你用的是虚拟主机,那样肯定是不适合建多站点的了。