解决wordpress除了首页都是404难题的5步图解步骤
域名和服务器配置一团浆糊?后台改完前台全是404?别慌,这套图解步骤能救命。
WordPress除了首页都是404,90%的情况不是代码写错了,而是域名解析、服务器伪静态、文件权限这三座大山没搬对。很多老板盯着后台发呆,以为主题坏了,其实根子扎在Nginx或Apache的配置里。
今天不扯虚的,直接上干货。针对这个最头疼的报错,我把排查逻辑拆成5个动作。你照着做,十分钟内大概率能通。如果还是不行,那就是服务器底层的问题,需要更深的排查。
一、 404报错的底层逻辑:为什么只有首页能活?
在动手之前,得明白浏览器和服务器是怎么“吵架”的。
当你输入 example.com 时,服务器直接返回 index.php 或 index.html,这是静态文件,所以首页正常。
当你输入 example.com/about-us/ 时,服务器找不到这个文件夹,这时候需要伪静态规则介入,告诉服务器:“别找了,把请求扔给 index.php,让WordPress自己去判断URL该显示什么内容。”
WordPress除了首页都是404,本质就是这一步断了。服务器没把请求交给WordPress,而是自己直接返回了404页面。
这里有个常见的误区:很多人以为是域名没解析对。其实如果域名没解析,首页也会打不开。既然首页能开,说明DNS解析和A记录指向服务器IP这一步是通的。问题出在服务器接收请求后的**重写规则(Rewrite Rules)**上。
常见诱因排查表
| 诱因类别 | 具体表现 | 概率 | 排查难度 |
|---|---|---|---|
| 伪静态配置缺失 | Nginx/Apache缺少 try_files 或 .htaccess 规则 |
60% | 低 |
| 文件权限错误 | wp-content 或根目录权限被误改 |
20% | 中 |
| 固定链接设置 | WP后台未设置“文章名”或其他固定链接 | 10% | 低 |
| 缓存插件冲突 | 缓存插件拦截了URL请求 | 5% | 中 |
| 服务器底层故障 | 磁盘满、PHP版本不兼容 | 5% | 高 |
二、 第一步:检查WordPress后台固定链接
这是最容易被忽略,但也最简单的一步。
- 登录WordPress后台。
- 点击左侧菜单 设置 -> 固定链接。
- 查看当前选项。如果是“默认”(
?p=123这种形式),请立刻改为 “文章名”。 - 点击 保存更改。
动作解析:
保存后,WordPress会自动重新生成 .htaccess(Apache)或提示需要更新伪静态(Nginx)。这时候刷新一下前端内页,看看是否恢复。
如果后台显示“保存成功”,但前端依然404,说明服务器没有权限自动写入 .htaccess,或者你用的是Nginx服务器(Nginx不依赖 .htaccess,而是依赖 nginx.conf)。
三、 第二步:服务器伪静态配置图解(核心步骤)
这一步是解决 WordPress除了首页都是404 的关键。根据你的服务器类型(Nginx 或 Apache),操作截然不同。
场景A:Nginx服务器(目前主流)
Nginx没有 .htaccess,必须在 nginx.conf 或站点配置文件中添加规则。
操作步骤:
- 登录服务器终端(SSH)。
- 找到你的站点配置文件,通常在
/etc/nginx/conf.d/或/etc/nginx/sites-enabled/下。 - 用
vi或nano编辑文件。 - 在
server { ... }代码块中,找到location /这一行。 - 在
location /内部,添加或修改try_files规则。
标准Nginx配置代码:
location / {# 关键代码:尝试匹配文件,匹配不到则交给 index.phptry_files $uri $uri/ /index.php?$args;
}# 确保 PHP 处理正确
location ~ \.php$ {fastcgi_pass unix:/run/php/php8.1-fpm.sock; # 根据你的PHP版本修改fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;
}
图解逻辑:
$uri:先找有没有这个文件(比如图片、CSS)。$uri/:再找有没有这个文件夹。/index.php?$args:如果前两个都找不到,把请求丢给index.php,并带上原始的查询参数。
操作后必做:
- 保存文件。
- 执行
nginx -t检查语法。 - 执行
nginx -s reload重载配置。 - 刷新前端内页。
场景B:Apache服务器
Apache依赖 .htaccess 文件。
- 确保服务器允许覆盖
.htaccess。在httpd.conf或apache2.conf中,确保AllowOverride设置为All或FileInfo。 - 在WordPress根目录下,检查是否存在
.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
- 保存后,重载Apache服务。
注意: 如果你的网站部署在子目录(如 example.com/blog/),RewriteBase / 需要改为 RewriteBase /blog/。这是很多人踩坑的地方。
四、 第三步:文件权限与目录结构体检
如果伪静态配置对了,还是404,大概率是权限或文件丢失。
1. 权限检查
WordPress需要读取文件,但出于安全,不需要执行权限(除了上传目录)。
推荐权限设置:
- 文件夹权限:
755 - 文件权限:
644 wp-config.php:440(更高安全性)wp-content/uploads:755(允许用户上传)
Linux命令一键修复:
cd /var/www/html/your-wordpress-dir
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
chmod 440 wp-config.php
2. 文件完整性检查
有时候,404是因为 wp-includes 或 wp-content/plugins 里的核心文件被杀毒软件误删,或者上传时丢失。
操作:
- 去WordPress官网下载同版本的压缩文件。
- 解压,对比核心目录文件。
- 重点检查
wp-load.php、wp-settings.php是否存在。
3. 隐藏文件陷阱
有些主机面板(如宝塔、cPanel)在上传时,会默认隐藏以 . 开头的文件。如果你手动创建 .htaccess,一定要确保它真的存在,而不是被面板“吞”了。可以在FTP客户端里勾选“显示隐藏文件”确认。
五、 第四步:缓存与插件冲突排查
有时候,问题不在服务器,而在插件。
1. 禁用所有插件
- 登录后台,将
wp-content/plugins目录重命名为plugins_old。 - 刷新前端。
- 如果内页恢复,说明是某个插件捣鬼。
- 将目录名改回,逐个启用插件,找出“元凶”。
常见捣鬼插件:
- 某些轻量级缓存插件(配置不当)。
- SEO插件(如Yoast,如果固定链接设置冲突)。
- 安全插件(误拦截URL请求)。
2. 清除缓存
- 浏览器缓存:按
Ctrl + F5强制刷新。 - 服务器缓存:如果用了Redis、Varnish或Memcached,记得清空。
- CDN缓存:如果接了Cloudflare,去控制台Purge All Cache。
六、 效果监测与Google Search Console调优
修好404只是第一步,还要确保搜索引擎能正确收录。
1. 验证修复效果
- 打开 Google Search Console (GSC)。
- 进入 URL检查 工具。
- 输入你之前404的内页URL,点击 测试URL。
- 查看状态:
- 如果显示“已发布”且无错误,恭喜,修复成功。
- 如果显示“404 (未找到)”,说明服务器依然没正确响应,回到第二步检查Nginx/Apache配置。
- 如果显示“重定向”,检查是否有301跳转干扰。
2. 提交站点地图
修复后,确保 sitemap.xml 能正常访问。在GSC中提交最新的站点地图,加速收录恢复。
3. 监控404日志
建议在服务器层面开启404日志监控(Nginx可通过 log_format 配置)。
- 如果大量出现非业务逻辑的404(如爬虫测试路径),是正常的。
- 如果大量出现用户真实访问的404,说明你的内容结构有问题,或者伪静态规则仍有漏洞。
七、 进阶:如何避免再次出现此问题?
1. 自动化部署
如果使用Git部署,确保部署脚本中包含伪静态配置的同步。不要手动改服务器配置文件,容易出错且不可追溯。
2. 使用容器化部署
Docker部署WordPress时,使用官方的 wordpress 镜像,并正确挂载 nginx 配置卷。这样可以确保每次启动环境都是一致的,避免“在我机器上是好的”这种尴尬。
3. 定期备份与演练
每季度进行一次全量备份恢复演练。确保当网站再次出现 WordPress除了首页都是404 时,你能在10分钟内通过备份回滚到稳定版本。
4. 技术选型建议
对于非技术人员,建议使用 Managed WordPress Hosting(托管WordPress主机),如SiteGround、Kinsta等。他们自动处理伪静态、缓存、安全更新,彻底屏蔽底层复杂度。
八、 常见Q&A
Q: 我改了Nginx配置,还是404,怎么办?
A: 检查PHP-FPM是否正常运行。执行 systemctl status php8.1-fpm 查看状态。如果PHP挂了,Nginx会把请求扔给PHP,但PHP没响应,也会报错。
Q: 我的网站在子目录,比如 example.com/shop/,怎么改?
A: Nginx中,try_files 规则不变,但 root 指令必须指向子目录的物理路径。Apache中,RewriteBase 必须改为 /shop/。
Q: 修改配置后,网站完全打不开了(500错误)?
A: 立即检查 error_log。通常是Nginx语法错误。执行 nginx -t 会提示具体哪一行错了。如果Nginx启动失败,检查是否端口被占用。
九、 总结与行动清单
解决 WordPress除了首页都是404 的核心在于:确认请求是否正确传递给了 index.php。
行动清单:
- 检查WP后台固定链接是否为“文章名”。
- 检查服务器伪静态配置(Nginx
try_files/ Apache.htaccess)。 - 检查文件权限(文件夹755,文件644)。
- 禁用所有插件,排除冲突。
- 在Google Search Console中验证URL状态。
这套 图解步骤 覆盖了95%的场景。如果你做完以上所有步骤,问题依旧存在,那可能需要联系你的服务器提供商,查看底层系统日志(/var/log/nginx/error.log 或 /var/log/apache2/error.log),寻找具体的报错信息。
你的网站用的什么技术栈?评论区聊聊 是Nginx还是Apache?PHP 7.4还是8.1?有没有用Docker? 不同的技术组合,坑的位置也不一样。把你当前的环境描述出来,老手们能更快帮你定位。 如果这篇文章帮你省了排查时间,点个赞,让更多人看到。