WordPress 白屏死机:系统化修复方法
WordPress 白屏死机(White Screen of Death, WSoD)正如其名:浏览器中显示一个完全空白的白色页面,没有错误信息、没有管理工具栏、没有关于出了什么问题的任何线索。页面源代码也是空的。它可能只影响前台,只影响后台,或两者兼有。
技术上讲,这是 PHP 遇到了致命错误(内存耗尽、调用未定义函数、语法错误),而调试输出被禁用了。WordPress 在生产环境默认隐藏错误,所以你看到的不是有用的错误信息,只有一片白屏。
本指南按可能性从高到低依次检查每个常见原因。逐步操作 —— 在白屏消失时停下来,问题就解决了。
步骤 1:启用 WP_DEBUG
在盲目猜测之前,先让 PHP 直接告诉你哪里出错了。打开 WordPress 根目录下的 wp-config.php,在 /* That's all, stop editing! */ 这行上方添加或修改以下内容:
// 添加到 wp-config.php 中,在 "stop editing" 行上方
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true); // 写入 wp-content/debug.log
define('WP_DEBUG_DISPLAY', true); // 在屏幕上显示错误
刷新白屏页面。你应该能看到类似这样的 PHP 错误信息,不再是空白:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes)
in /var/www/html/wp-content/plugins/some-plugin/includes/class-big-query.php on line 342
这直接告诉你原因和出问题的文件。如果开启调试后白屏仍然存在,说明错误发生在 WordPress 加载之前 —— 跳到步骤 2。
步骤 2:检查并增加 PHP 内存限制
白屏最常见的单一原因是 PHP 内存耗尽。当某个插件加载大型数据集、主题有低效代码、或者安装了大量插件都在争抢同一块内存时就会发生。
方法 A:通过 wp-config.php 增加
// 添加到 wp-config.php,在 "stop editing" 行上方
define('WP_MEMORY_LIMIT', '256M');
方法 B:通过 php.ini 增加
找到你的 PHP 配置文件并增大 memory_limit 指令:
# 找到 php.ini 位置
php -i | grep "Loaded Configuration File"
# 编辑它
sudo nano /etc/php/8.2/cli/php.ini # CLI
sudo nano /etc/php/8.2/fpm/php.ini # PHP-FPM
; 在 php.ini 中
memory_limit = 256M
如果修改了 FPM 的 php.ini,需要重启 PHP-FPM:
sudo systemctl restart php8.2-fpm
方法 C:通过 .htaccess 增加
# 添加到 .htaccess(仅 Apache 有效;Nginx 忽略此指令)
php_value memory_limit 256M
验证新限制是否生效:
php -r "echo ini_get('memory_limit');"
# 应该输出: 256M
步骤 3:禁用所有插件
插件冲突是第二大常见原因。最快的测试方法是重命名插件目录,让 WordPress 找不到任何插件:
# 进入 WordPress 根目录
cd /var/www/html
# 重命名插件文件夹(这会禁用所有插件)
mv wp-content/plugins wp-content/plugins.disabled
刷新站点。如果白屏消失了,说明某个插件就是罪魁祸首。逐个重新启用:
# 改回来以重新启用
mv wp-content/plugins.disabled wp-content/plugins
# 然后逐个重命名插件文件夹来隔离问题插件:
cd wp-content/plugins
mv akismet akismet.disabled
mv contact-form-7 contact-form-7.disabled
# 持续测试直到白屏再次出现
白屏再次出现前最后恢复的那个插件就是问题所在。检查更新、换用替代插件,或联系开发者。
步骤 4:切换到默认主题
如果禁用插件没有效果,主题可能是原因。通过重命名主题文件夹或修改数据库来激活 WordPress 默认主题(如 Twenty Twenty-Five):
# 临时重命名当前主题文件夹
cd /var/www/html/wp-content/themes
mv your-theme your-theme.disabled
WordPress 会自动回退到默认主题。如果站点恢复正常,说明你的自定义主题有 PHP 错误 —— 检查其 functions.php 中的语法错误或未定义函数调用。
或者通过 wp-config.php 强制指定活动主题:
// 添加到 wp-config.php
define('WP_DEFAULT_THEME', 'twentytwentyfive');
步骤 5:检查并修复 .htaccess
损坏的 .htaccess 文件可能导致服务器级别的错误,表现为白屏。备份当前文件并替换为 WordPress 默认规则:
# 备份当前 .htaccess
cp /var/www/html/.htaccess /var/www/html/.htaccess.bak
# 替换为默认 WordPress .htaccess
cat > /var/www/html/.htaccess << 'EOF'
# Default WordPress .htaccess
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
EOF
如果你的 WordPress 安装在子目录(如 /blog/),相应修改 RewriteBase:
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
替换 .htaccess 后刷新站点,检查固定链接是否正常。你也可以从 WordPress 后台重新生成 .htaccess:进入设置 > 固定链接,不做任何修改直接点击"保存更改"。
步骤 6:检查文件权限
不正确的文件权限会导致 PHP 在读取或写入 WordPress 文件时失败。标准 WordPress 安装正确的属主和权限:
# 将属主设置为 Web 服务器用户
sudo chown -R www-data:www-data /var/www/html
# 目录权限: 755
find /var/www/html -type d -exec chmod 755 {} \;
# 文件权限: 644
find /var/www/html -type f -exec chmod 644 {} \;
# wp-config.php 应该更严格: 440 或 600
chmod 600 /var/www/html/wp-config.php
不要将目录或文件设为 777。这是安全隐患,通常也不是正确的修复方法。
快速诊断决策树
| 现象 | 最可能的原因 | 修复方法 |
|---|---|---|
| 前台白屏,后台正常 | 主题或特定页面模板错误 | 切换到默认主题(步骤 4) |
| 后台白屏,前台正常 | 后台专用插件冲突 | 禁用插件(步骤 3) |
| 前台和后台都白屏 | PHP 内存不足或核心插件冲突 | 增加内存(步骤 2),然后禁用插件 |
| 插件或主题更新后白屏 | 新版本有 PHP 错误 | 回退更新或禁用该组件 |
| 服务器迁移后白屏 | 文件权限、.htaccess 或数据库连接问题 | 修复权限(步骤 6)并检查 wp-config 数据库配置 |
| 调试显示 "Allowed memory size exhausted" | PHP 内存限制太低 | 增加到 256M(步骤 2) |
| 调试显示 "Call to undefined function" | 插件加载顺序错误或缺少依赖 | 禁用错误信息中提到的插件 |
进阶提示:修复白屏后,不要在生产环境保持WP_DEBUG和WP_DEBUG_DISPLAY为true。将WP_DEBUG_DISPLAY设为false,保持WP_DEBUG_LOG为true,这样错误会被记录到wp-content/debug.log而不会显示给访客。