WordPress多站点迁移服务器后新增站点无法登录:空白页及HTTP 500错误
我碰到过好几个用户在迁移WordPress多站点后遇到这种棘手的问题——能建新站点但登不上仪表盘,要么空白要么跳500,既然你已经排查过.htaccess,咱们一步步来挖根儿解决:
先抓PHP错误日志(最核心的线索)
HTTP 500和空白页大多是PHP层面的问题,而且很多服务器默认会关闭错误输出,导致看不到具体原因。你可以这么做:- 去新服务器的日志目录找PHP错误日志,Apache一般在
/var/log/apache2/,Nginx在/var/log/nginx/; - 如果找不到,临时开启WordPress的调试模式:在
wp-config.php里添加这两行代码:
然后刷新错误页面,去define('WP_DEBUG', true); define('WP_DEBUG_LOG', true);wp-content/debug.log里看具体报错——比如是不是插件冲突、文件权限不对,或者数据库里的站点URL没更全?
- 去新服务器的日志目录找PHP错误日志,Apache一般在
核对数据库里的站点URL配置
多站点的子站点信息藏在几个关键表里,很容易在迁移时漏改:- 检查
wp_blogs表(如果你的数据库前缀不是wp_就对应修改)里每个子站点的domain和path字段,确保指向新服务器的地址; - 每个子站点对应的
wp_{blog_id}_options表(比如子站点ID是2就是wp_2_options)里的siteurl和home字段,必须和新站点的访问URL一致; - 主站点的
wp_options表(siteurl、home)和wp_sitemeta表(siteurl)也要再核对一遍。
- 检查
修复文件权限问题
迁移后文件权限大概率会乱套,这是500错误的常见诱因:- 所有文件权限设为
644,目录权限设为755; - 确保服务器的运行用户(比如
www-data、apache)拥有wp-content/、wp-config.php这些关键文件的读写权限——不然PHP没法生成缓存、写入日志,直接就崩了。
- 所有文件权限设为
排查插件/主题冲突
先把所有插件临时禁用:直接把wp-content/plugins/目录改名为plugins-disabled,然后切换到WordPress默认主题(比如Twenty Twenty-Four),再试试登录仪表盘。如果能进去,再一个个恢复插件,找到搞事情的那个。
注意:网络激活的插件也要排查,主站点的插件可能会影响所有子站点。重新生成.htaccess(再确认一遍)
虽然你已经检查过,但多站点的.htaccess规则和单站点不一样,容易写错。如果能进主站点的网络仪表盘,去「设置→网络设置」里复制官方生成的规则覆盖现有文件;如果进不去,直接用标准规则:
子目录型多站点:RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] # add a trailing slash to /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]子域名型多站点:
RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] # add a trailing slash to /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]改完后记得把
.htaccess权限设为644,确保服务器能读取。检查PHP版本和扩展
新服务器的PHP版本是不是和旧服务器差太多?比如旧服务器用PHP7.4,新服务器用PHP8.2,有些老插件/主题可能扛不住高版本PHP。另外,确认WordPress必需的PHP扩展都开启了——比如mysqli、curl、gd,缺了这些也会直接500。
内容的提问来源于stack exchange,提问作者Revathy Murugan

