缙哥哥的博客
与你分享我的点点滴滴生活

宝塔环境下开启WordPress多站点(含伪静态)

为什么最近缙哥哥开始研究多站点了呢,因为多站点不用每次开个网站都要重新安装WordPress,并且最重要的是可以多个WordPress网站之间用户数据共享,这才是缙哥哥想要的。否则以多站点大量插件不兼容的问题,缙哥哥是一点也不喜欢!

开启 WordPress 多站点网络配置

首先建议全新安装一个站点,并在网站根目录下的 wp-config.php 添加如下代码:

/* 开启 WordPress 多站点配置 - https://www.dujin.org/12501.html */
define('WP_ALLOW_MULTISITE', true);

缙哥哥建议将上述代码复制到下方描述的位置上面

/* 好了!请不要再继续编辑。请保存本文件。使用愉快! */

配置多站点网络

由于缙哥哥实际操作为子目录形式,在此着重讲解。在上述“开启多站点配置”代码的下方,添加

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

WordPress多站点伪静态设置

在宝塔网站设置的伪静态中设置相关代码。

Apache伪静态规则

将下方代码加入网站根目录中的 .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]

Nginx伪静态规则

由于 WordPress 默认提供的是 apache 的伪静态规则,所以这里缙哥哥利用 宝塔规则转换工具:Apache转Nginx 进行转换,得到如下规则:

#ignored: "-" thing used or unknown variable in regex/rew 
	rewrite ^/([_0-9a-zA-Z-]+/)?wp-admin$ /$1wp-admin/ permanent;
if (-f $request_filename){
	set $rule_2 1;
}
if (-d $request_filename){
	set $rule_2 1;
}
if ($rule_2 = "1"){
#ignored: "-" thing used or unknown variable in regex/rew 
}
	rewrite ^/([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) /$2 last;
	rewrite ^/([_0-9a-zA-Z-]+/)?(.*\.php)$ /$2 last;
	rewrite /. /index.php last;

完整Nginx伪静态规则

然而,缙哥哥才添加后发现并不能访问网站,研究许久,发现需要在原本的 WordPress 伪静态规则之上进行添加,在此,列出完整的 WordPress 多站点Nginx伪静态规则,小伙伴们可根据本教程结合自己的实际情况进行调整。

location / {
	index index.html index.php; 
	if (-f $request_filename/index.html){ 
		rewrite (.*) $1/index.html break; 
	} 
	if (-f $request_filename/index.php){ 
		rewrite (.*) $1/index.php; 
	} 
	if (!-f $request_filename){ 
		rewrite (.*) /index.php; 
	} 
    #ignored: "-" thing used or unknown variable in regex/rew 
	rewrite ^/([_0-9a-zA-Z-]+/)?wp-admin$ /$1wp-admin/ permanent;
if (-f $request_filename){
	set $rule_2 1;
}
if (-d $request_filename){
	set $rule_2 1;
}
if ($rule_2 = "1"){
#ignored: "-" thing used or unknown variable in regex/rew 
}
	rewrite ^/([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) /$2 last;
	rewrite ^/([_0-9a-zA-Z-]+/)?(.*\.php)$ /$2 last;
	rewrite /. /index.php last;
    
} 

rewrite /wp-admin$ $scheme://$host$uri/ permanent;

缙哥哥建议另存为模板,比如命名为 WordPress多站点伪静态 都可以,以免每次都要配置一遍!

OK,大功告成,这时候我们重新登录进入后台主站点设置固定链接,结果发现默认增加了blog前缀

这可不是想要的结果,我们在左上角我的站点管理网络站点(所有站点)主站点编辑设置里面找到 Permalink Structure 将前面的 /blog 删掉即可

记得在最下方点击保存,这样就可以完美去除 WordPress多站点 /blog 前缀,同时不会添加index.php,搞定收工!

历史上的今天:

  1. 2017年:  《Adobe Photoshop Lightroom 5.4 中文绿色版》- 作者:缙哥哥(19)
赞(9) 打赏
转载请注明来源及链接:缙哥哥 » 宝塔环境下开启WordPress多站点(含伪静态)

评论 4

评论前必须登录!

 

  1. #2

    默认情况下把网站后台生成的apache规则用bt工具转换成nginx格式,替换、替换、替换掉网站原来的伪静态规则即可。

    haoran7个月前 (01-08)
    • 我曾经尝试过在Nginx、php7.2环境下直接替换生成的apache规则(通过BT工具转换后),发现无效。

      缙哥哥7个月前 (01-08)
  2. #1

    不错,学习了!分享一下我的情况,我的BT面板后台设置伪静态规则栏,添加多站点规则无法生效,最后直接在/www/server/panel/vhost/rewrite/网站域名.com.conf 配置文件中添加规则才生效。遇到类似情况的朋友可以试试这个方法。

    haoran7个月前 (01-08)
    • 这里WordPress网络直接生成的规则是要添加在BT伪静态WordPress规则中间的,而不是前面或者后面,我曾经也因此而无法打开子站点。注意一下!

      缙哥哥7个月前 (01-08)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏