本文约 2,717 字,预计阅读 7 分钟。文中命令与配置均经过实测,可直接参考执行。
引言
为了在一个后台管理多个独立站点,很多站长会启用 WordPress 的多站点(Multisite)功能。可是开启网络之后经常出现这样的问题:主站一切正常,新建的子站却怎么都打不开,要么跳转到 404,要么提示「此站点无法访问」,甚至连网络后台里的站点列表都点不进去。不少人试了几次不行就放弃,改回单站点,白折腾一场。多站点的原理比较特殊,它的路由完全依赖服务器的重写规则和 wp-config.php 里的一组常量,只要其中一环缺失,子站就会集体失联。另外子目录模式和子域名模式的要求也不一样,混着用必然出错。下面分别讲清楚两种模式的排查和解决思路。
故障原因分析
- wp-config.php 缺少多站点常量。开启网络时 WordPress 会让你把
MULTISITE等一组常量粘进配置文件,漏了子站就没有路由依据。开启网络的入口和运行时的常量是两回事,前者只是让菜单出现,后者才真正决定子站怎么访问。 - 伪静态规则没更新。普通站点的规则和多站点规则不一样,尤其子目录模式需要额外规则,否则子站 404。
- 子域名模式没做泛解析。子站用的是
子站名.example.com,没有*.example.com的 DNS 记录就根本解析不到,浏览器直接报找不到服务器。 - 数据库中的 wp_blogs、wp_site 记录异常。迁移或恢复不当会导致站点表对不上,子站找不到自己的配置。
- 主机的通配符证书或服务器别名未配置。子域名模式还需要证书覆盖
*.example.com,否则会被浏览器拦截。 - 网络后台里没有真正创建好子站,路径与实际不匹配。
分步解决方案
方法一:确认 wp-config.php 中的多站点常量。 开启网络后,WordPress 会提示在 wp-config.php 中加入以下内容(以子目录模式为例):
define('WP_ALLOW_MULTISITE', true);
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', false);
define('DOMAIN_CURRENT_SITE', 'www.example.com');
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);
WP_ALLOW_MULTISITE 只是打开入口,真正的运行常量是后面这几个。若用子域名模式,把 SUBDOMAIN_INSTALL 改成 true;若装在子目录,把 PATH_CURRENT_SITE 改成对应路径。请逐字核对域名和路径,多一个斜杠都可能出问题。
方法二:更新伪静态规则(子目录模式)。 普通 WordPress 的 .htaccess 不足以支撑多站点,需替换成:
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# 给 /wp-admin 补斜杠
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]
Nginx 环境下在 server 段加入:
if (!-e $request_filename) {
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
rewrite ^(/[^/]+)?(/wp-.*) $2 last;
rewrite ^(/[^/]+)?(/.*\.php) $2 last;
}
改完用 nginx -t 验证语法再重载。
方法三:为子域名模式配置泛解析。 到域名 DNS 管理处添加两条记录:一条 *.example.com 指向服务器 IP 的 A 记录,以及可选的一条 @(根域名)A 记录。若有 IPv6 需求还要加 AAAA 记录。泛解析生效后,任意子站名.example.com 才能解析到你的服务器,这一步不做,再对的伪静态也没用。
方法四:核对数据库站点表。 用 phpMyAdmin 打开 wp_blogs 和 wp_site 表,检查每个子站的 domain、path 是否正确,主站的 blog_id 是否为 1。迁移站点后这类记录很容易停留在旧域名,必须一并修正。
方法五:处理证书与服务器别名。 子域名模式建议给证书加一个泛域名(*.example.com)。宝塔等面板可申请含泛域名的 DV 证书,否则子站会因证书不匹配被浏览器拦截,看起来像「无法访问」。
验证:逐步定位卡在哪一环。 先用浏览器访问主站,再访问子站的 /wp-admin/。若主站正常而子站 404,多半是伪静态规则或常量写错;若提示「无法解析域名」,则是泛解析还没生效;若被提示证书不安全或连接被拒,检查泛域名证书是否覆盖子站。按这个顺序逐条排除,就能快速锁定问题所在。
常见踩坑点
- 只加了
WP_ALLOW_MULTISITE,忘了加后面那几个运行常量。 - 子目录模式沿用普通站点的 .htaccess,子站全部 404。
- 子域名模式忘记做泛解析,子站直接解析失败。
PATH_CURRENT_SITE或DOMAIN_CURRENT_SITE写错,主站也跟着出问题。- 迁移站点后没更新
wp_blogs表里的旧域名。 - 泛域名证书没配,浏览器误报为站点不可用。
- 把子目录和子域名两种模式混着理解,规则对不上,越改越乱。
总结
WordPress 多站点子站无法访问,八成问题出在「常量、伪静态、DNS 泛解析」这三点上。子目录模式重点检查 wp-config.php 常量和增强版重写规则,子域名模式则要额外做好 *.example.com 的解析与泛域名证书。按「配置常量 → 更新伪静态 → 核对 DNS 与站点表 → 验证证书」的顺序排查,WordPress 多站点子站无法访问的问题就能逐一定位并解决,新建子站也能顺利访问。
