WordPress 开启多站点(含Apache和Nginx伪静态规则)

为什么要研究多站点呢,因为多站点不用每次开个网站都要重新安装WordPress,并且最重要的是可以多个WordPress网站之间用户数据共享。否则会有多站点大量插件不兼容的问题。

开启 WordPress 多站点网络配置

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

/* 开启 WordPress 多站点配置  */
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);

记得把yourdomain.com改一下哈

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;

完整的WordPress多站点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多站点伪静态 都可以,以免每次都要配置一遍!

format,webp

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

format,webp

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

format,webp

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

发表评论

Crypto logo

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus cursus rutrum est nec suscipit. Ut et ultrices nisi. Vivamus id nisl ligula. Nulla sed iaculis ipsum.

Contact

Company Name

Address