EP04. “500 Internal Server Error 完整解决指南”
🔒 登录后可标记已读这篇笔记专门讲 WordPress「500 Internal Server Error」(有时显示成「Critical Error」「Sorry, something went wrong」等不同措辞,本质都是同一个错误)的完整排查流程——13 种解决方案按最该先试的顺序排列,另外附上几种特定场景(只有 wp-admin 出错、搬家后出错、Elementor/WooCommerce 场景等)的针对性修法。其他常见错误的速查表看《服务器与连接类错误速查》系列。
重点内容
500 错误是什么
500 错误代表 PHP 在 WordPress 加载完成前就失败了,服务器碰到自己无法处理的问题,只好回传一个笼统的 500 状态码。不同浏览器/主机/CDN 显示的措辞可能不同(500 Internal Server Error、HTTP Error 500、"Sorry, something went wrong" 等),但成因是一样的。
[截图:浏览器打开网站时显示的 500 Internal Server Error / "Sorry, something went wrong" 错误页面]
📌 500 属于 5xx 系列错误的其中一种,502(网关错误)、503(服务不可用)、504(网关超时)是各自独立的问题,本篇的解法对这几种不适用——先用浏览器开发者工具的 Network 分页确认实际状态码再对症下药。
常见成因
| 成因 | 触发情境 | 对应解法 |
|---|---|---|
| .htaccess 文件损坏 | 插件更新、手动编辑、安全工具、搬家过程出错 | 方案 3 |
| 插件冲突/致命错误 | 新装/更新插件后,跟 WordPress 核心或 PHP 版本不兼容 | 方案 4 |
| 主题冲突 | 主题过时、子主题调用不存在的父主题函数、functions.php 自定义代码出错 | 方案 5 |
| PHP 内存不足 | 大量插件、内存泄漏、大批量操作(导入/备份/图片处理)超过主机允许的内存 | 方案 6 |
| 文件/文件夹权限错误 | 手动上传文件、还原备份、服务器变动导致权限跑掉 | 方案 7 |
| PHP 版本不兼容 | 主机升级 PHP(常见升到 8.2/8.3),旧主题/插件用了已经被移除的函数 | 方案 8 |
| CDN 层级的 5xx 错误 | 错误其实来自 Cloudflare 等 CDN,不是源服务器本身 | 方案 11 |
💡 如果错误是在更新了某个东西(插件/主题/WordPress 核心/PHP)之后才出现,几乎可以确定就是那次更新造成的,直接从方案 4 开始查、往回追最近的改动。
⚠️ 动手排查前一定要先备份网站——还能登入 wp-admin 就用 UpdraftPlus 之类的插件备份;连后台都进不去就用 FTP 手动下载整个根目录 + phpMyAdmin 导出数据库。
13 个解决方案(按建议尝试顺序)
方案 1:先备份(见上方备份说明)
方案 2:刷新页面 + 清浏览器缓存:服务器资源瞬间飙高经常会造成暂时性的 500 错误,先刷新看看是不是已经消失;Ctrl+Shift+Delete(Mac 用 Cmd+Shift+Delete)清缓存,清「过去 24 小时」的缓存图片和文件。也可以用手机关 WiFi 切数据流量测试,或用 downforeveryoneorjustme.com 这类工具确认是不是只有自己看得到错误。
方案 3:检查/重置 .htaccess 文件(最常见成因,也是最简单的修法,只适用 Apache 服务器,Nginx 没有这个文件):
- FTP 连上网站,根目录找到
.htaccess(FTP 客户端可能默认隐藏,要到设置里打开「显示隐藏文件」) - 右键重命名成
.htaccess_old,访问网站看错误是否消失 - 如果消失,代表就是这个文件的问题——回后台 Settings → Permalinks,什么都不改直接点 Save Changes,WordPress 会自动生成一个新的干净
.htaccess - 如果连后台都进不去,手动建一个新的
.htaccess文件,贴入以下默认规则:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Multisite(多站点)安装用的规则不一样,需要另一套专属代码,不能直接套用上面这份。
方案 4:排查插件:
- 还能登入后台:Plugins 页面全选、批量 Deactivate,确认错误消失后再一个个重新启用,哪个插件启用后错误重新出现,就是它的问题
- 后台进不去:FTP 连上网站,把
wp-content/plugins文件夹改名成plugins_disabled(WordPress 找不到 plugins 文件夹时会自动停用所有插件),确认错误消失后改回plugins,再逐一把插件的子文件夹改名测试 - 如果错误是插件更新后才出现的,直接用 WP Rollback 插件把该插件回退到旧版本更快
方案 5:排查主题:切换成默认主题(比如 Twenty Twenty-Four)测试。能登后台就在 Appearance → Themes 直接切换;进不去后台就用 FTP 把 wp-content/themes 里当前启用的主题文件夹改名,WordPress 会自动 fallback 到最近安装的默认主题。确认是主题问题后,检查主题官网有没有已知问题的补丁,或考虑换一个仍在维护的主题;如果是自己改过 functions.php,用子主题重新套用自定义代码,避免直接改动主题文件。
方案 6:调高 PHP 内存限制:一般现代网站至少需要 256MB,电商这类重型网站可能要 512MB。改 wp-config.php,在「That's all, stop editing!」这行上方加:
define( 'WP_MEMORY_LIMIT', '256M' );
如果主机是用 php.ini 或 .user.ini 控制内存限制,改成加一行 memory_limit = 256M。⚠️ WordPress 用的内存不能超过主机在服务器端允许的上限,调了没用可能代表某个插件写得不好、疯狂吃资源,这时候要靠 debug log 具体揪出是哪个插件。
方案 7:检查/修正文件与文件夹权限:WordPress 标准权限——文件夹 755、文件 644、wp-config.php 600 或 644。⚠️ 千万不要设成 777,这是严重的安全隐患,主机通常会自动拦截。搬家或还原备份后权限常常会跑掉。用 FTP 客户端右键 File Permissions 逐一设定,或用递归选项一次套用到整个目录;懂 SSH 的话可以用命令:
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
chmod 600 wp-config.php
方案 8:切换/更新 PHP 版本:主机升级 PHP 版本后,旧插件/主题用到已被移除的函数会直接崩溃。Tools → Site Health → Info 分页能查看当前 PHP 版本;后台进不去就到主机控制面板找 PHP Settings/PHP Manager。
[截图:Site Health → Info 分页,Server 区块里显示的当前 PHP 版本号]cPanel 主机通常在「Software → Select PHP Version」能切换。先降级到旧版本救回网站,同时找插件/主题的更新版本,降级只是权宜之计,主机迟早会彻底停止支持旧版本。
方案 9:开启 WordPress Debug Log:改 wp-config.php,把 define('WP_DEBUG', false); 改成 true,下面加:
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
第一行让错误写进 wp-content/debug.log,第二行确保错误不会直接显示给访客看(避免泄漏敏感信息)。重新触发一次错误后打开 debug.log,能看到具体是哪个文件、哪一行代码出问题。如果开了这个还是没生成 log 文件,可能是 .htaccess 问题(PHP 都还没跑起来)、或 wp-content 文件夹没有写入权限(设成 755)。主机自己的服务器错误日志(跟 WordPress debug log 是分开的)通常在 cPanel 的 Metrics → Error Log 能找到。
方案 10:替换 WordPress 核心文件:核心文件损坏常见于更新失败、恶意程序感染、迁移过程文件传输中断。去 WordPress.org 下载最新版本,解压后只上传 wp-admin、wp-includes 和根目录的零散文件,千万不要覆盖 wp-content(会清空所有主题/插件/媒体文件)、也不要覆盖 wp-config.php(数据库连接凭据会丢失)。
方案 11:排查 Cloudflare/CDN 层级的 5xx 错误:有时候 500 错误其实来自 Cloudflare 等 CDN,不是源服务器本身。看错误页面有没有 Cloudflare 品牌标志、Error Reference Number、或 "Cloudflare Ray ID" 字串——有的话代表问题出在 CDN。到 Cloudflare 后台点「Pause Cloudflare on Site」暂时绕过测试,如果绕过后网站正常,问题就出在 CDN 端(可能是 Cloudflare Workers 脚本出错、Page Rules 设置错误、或 Cloudflare 自己网络故障,可以查 cloudflarestatus.com)。
方案 12:清理损坏的数据库 Transients(暂存数据):如果以上方法都试过还是不定期崩溃(尤其是购物车/结账/搜索这类动态页面才出问题,静态页面正常,数据库体积异常庞大),问题可能出在 wp_options 表里堆积的过期/损坏 transients。能登后台就用 WP-Optimize 插件,进 Database 分页选「Remove expired transient options」清理;进不去后台就在 phpMyAdmin 的 SQL 分页跑:
DELETE FROM wp_options WHERE option_name LIKE '%_transient_%';
(如果数据库有自定义前缀,wp_options 要换成实际表名)。WordPress 之后会自动重建需要的 transients,不用担心。
方案 13:找主机商支援:以上都排查过还是解决不了,就该找主机技术支援。写工单时一次给齐这些信息能大幅加快处理速度:出错网址、时间点、最近的改动(插件更新/迁移/PHP 版本变动)、已经试过哪些方法、以及方案 9 找到的具体 debug log 错误内容。
特定场景速查
| 场景 | 大概率原因 | 处理顺序 |
|---|---|---|
| 只有 wp-admin 出错,前台正常 | 后台专属插件太重、wp-admin 核心文件损坏、后台查询吃光内存 | FTP 停用插件 → 换新的 wp-admin 文件夹 → 内存调到 512MB |
| 搬家/迁移后出错 | .htaccess 还指向旧主机、PHP 版本不匹配、权限被重置 | 重置 .htaccess → 确认 PHP 版本一致 → 搜索替换写死的旧网址 → 权限重设 755/644 |
| 保存/发布文章时出错 | 保存动作比单纯加载页面更吃内存;防火墙拦截 REST API;某插件的保存钩子出错 | 内存调到 512MB;如果 log 提到 /wp-json/,把该端点加入安全插件白名单 |
| Elementor 编辑器出错 | 页面构建器本身很吃资源 | 内存调 512MB、max_execution_time 调到 300 秒;还是不行就用 FTP 清空 /wp-content/uploads/elementor/css/ 缓存 |
| WooCommerce 结账页出错 | 支付网关插件更新出问题、Session 处理冲突、购物车计算吃光内存 | 先回退最近更新的支付插件;再调内存;查 debug log 里跟 WC_Session_Handler 相关的报错(通常是跟缓存/登入插件冲突) |
| 只有内页链接出错,首页正常 | 固定链接规则(rewrite rules)损坏 | Settings → Permalinks 直接点 Save Changes 强制重建 .htaccess(Nginx 要直接改服务器配置) |
| 上传媒体时出错 | PHP 上传限制太严、uploads 目录权限不对 | 调高 upload_max_filesize 和 post_max_size 到 64M;权限不对就重设 /wp-content/uploads/ |
常见误区
- ❌ 一遇到 500 错误就先怀疑网站被黑——多数情况只是配置或代码问题,除非同时发现陌生的管理员账号或诡异文件,才需要担心是安全问题
- ❌ 分不清 500 跟 502/503/504 的差别,用错误的方法排查——先用浏览器 Network 分页确认实际状态码,这几种 5xx 错误成因完全不同
- ❌ 覆盖核心文件时连 wp-content 或 wp-config.php 一起覆盖——这两个绝对不能碰,会分别清空全站内容和搞丢数据库连接信息
- ❌ 权限设置图方便直接设成 777——这是严重安全隐患,多数主机会自动拦截,正确数值是文件夹 755、文件 644
- 💡 找不到问题根源时,Debug Log(方案 9)是最省时间的方法——与其一个个方案盲测,不如先开 log 看具体是哪个文件哪一行出错
Sources
Blog / Website:
- WordPress 500 Internal Server Error: 13 Fixes That Actually Work — https://www.cloudways.com/blog/wordpress-500-internal-server-error/
- How to Fix the 500 Internal Server Error in WordPress (with Video) — https://www.wpbeginner.com/wp-tutorials/how-to-fix-the-internal-server-error-in-wordpress/