本文约 2,780 字,预计阅读 7 分钟。文中命令与配置均经过实测,可直接参考执行。
引言
很多站长在 WordPress 后台把固定链接从默认的「朴素」形式改成「文章名」或自定义结构后,前台文章、分类、标签页会集体变成 404「找不到页面」,但首页却还能正常打开。这通常不是文章被删除了,而是服务器没有正确识别 WordPress 的伪静态(重写)规则——所有形如 /hello-world/ 的地址被服务器当成不存在的物理目录去查找,找不到真实文件就直接返回 404。尤其是从 Apache 换到 Nginx、或者更换主机商、迁移站点之后,这个问题几乎必然出现。很多人都以为是数据出了问题,急着重装或者导数据库,结果越弄越乱。其实只要把伪静态这一环补上,文章就能立刻恢复。本文把背后的原因和 Nginx、Apache 两套环境的配置方法一次性讲清楚,照着操作基本都能解决。
故障原因分析
- 服务器缺少重写模块或模块未开启。Apache 依赖 mod_rewrite 模块,Nginx 需要在编译时带上 rewrite 模块(绝大多数发行版自带),缺少时伪静态规则根本无法生效,前台只会看到干巴巴的 404。
- 根目录没有 .htaccess,或者规则被覆盖。固定链接依赖根目录的 .htaccess 把
/post-name/转发给index.php?p=xx,文件不存在、内容为空,或被主题、插件覆写,都会导致 404。 - Nginx 默认不读取 .htaccess。Nginx 环境必须把重写规则写进站点配置文件的 server 段里,很多站长照抄 Apache 教程,结果规则形同虚设,白忙一场。
- 站点地址与实际访问域名不一致。修改域名后没有同步更新 WordPress 地址和站点地址,重写生成的链接仍指向旧域名,访问后自然 404。
- AllowOverride 被设为 None。Apache 主配置里禁止了 .htaccess 生效,即使文件里写了规则也不起作用,这是 VPS 自建环境的常见坑。
- 缓存或 CDN 保存了旧的 404 结果。有时规则其实已经修好了,但浏览器或 CDN 仍在返回缓存的错误页,让人误以为没生效。
分步解决方案
方法一:先重新保存一次固定链接。 进入「后台 → 设置 → 固定链接」,不做任何修改直接点「保存更改」。这一步会触发 WordPress 重新生成 rewrite_rules 并尝试写入 .htaccess,在目录权限正常的环境里,仅此一步就能恢复大半问题,也是最省事的排查起点。
方法二:Apache 环境配置文件。 在网站根目录(与 wp-config.php 同级)新建或编辑 .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
这几行的意思是:当请求的文件或目录不存在时,统统交给 index.php 处理,这正是 WordPress 路由能工作的前提。如果是子目录安装,把 RewriteBase / 改成 RewriteBase /子目录名/。同时确认 Apache 主配置(httpd.conf 或站点 conf)中允许读取:
<Directory /var/www/html>
AllowOverride All
Require all granted
</Directory>
方法三:Nginx 环境配置伪静态。 Nginx 不读 .htaccess,需要在站点配置的 server {} 中加入:
location / {
try_files $uri $uri/ /index.php?$args;
}
若 WordPress 装在子目录 /blog,则写成:
location /blog/ {
try_files $uri $uri/ /blog/index.php?$args;
}
改完先执行 nginx -t 检查语法,再用 nginx -s reload 重载配置,避免语法错误让整个站点宕机。
方法四:宝塔面板 / 虚拟主机面板用户。 宝塔面板进入「网站 → 设置 → 伪静态」,选择「wordpress」模板后保存;虚拟主机通常在控制面板里提供「伪静态」开关,选 WordPress 即可,也可以直接粘贴上面的规则,无需手工编辑配置文件。
方法五:核对站点地址。 后台「设置 → 常规」中确认 WordPress 地址和站点地址都是当前域名(带正确的 http/https)。若后台已经进不去,可临时在 wp-config.php 中强制指定:
define('WP_HOME', 'https://www.example.com');
define('WP_SITEURL', 'https://www.example.com');
方法六:恢复后清理缓存验证。 规则配好后,用无痕窗口访问几篇不同的文章、分类页和标签页,确认全部返回 200。若有 CDN,记得刷新 CDN 缓存,避免仍看到旧的 404 页面。
常见踩坑点
- 只改了后台固定链接,没检查服务器伪静态,以为保存一下就会自动生效。
- Nginx 服务器上照抄 .htaccess 文件,规则完全不起作用。
- 子目录安装时
RewriteBase写成/,导致链接漏掉子目录前缀。 - .htaccess 文件属主或权限错误,Apache 进程读不到,规则依然失效。
- 套了 CDN 或反向代理后,回源时 Host 不对,重写条件判断出错。
- 开了「强制 HTTPS」但 SSL 证书没配好,跳转被打断,浏览器显示成 404 或无法访问。
- 修改后没清理浏览器缓存,被旧的 404 结果误导,反复怀疑配置没生效。
总结
固定链接修改后出现 404,核心原因十有八九是伪静态规则没配对,而不是文章数据丢失。排查顺序建议是:先重新保存一次固定链接,再确认服务器环境到底是 Apache 还是 Nginx,分别写好对应的重写规则,最后核对站点地址是否一致,并检查是否有缓存或 CDN 干扰。整个过程并不复杂,关键是别急着动数据库、别急着重装。把这几步按顺序做完,WordPress 固定链接 404 的问题基本都能定位并解决,恢复后清理一次浏览器和站点缓存再逐页刷新验证即可。
