给一个 WordPress 站配伪静态,首页正常,所有内页 404。

这种事我遇到不下五次,每次都是同一个原因。

记一下排查顺序,省得下次再从头想。

先确认是伪静态的问题

现象:首页 https://www.example.com/ 正常,点任何一篇文章变成 404。

直接用 curl 看返回码:

curl -I https://www.example.com/123.html

如果是 404,再看一下这个 404 是谁返回的:nginx 的还是 WordPress 的。

nginx 的 404 页面很简陋,一行 404 Not Found,下面是 nginx 字样。

WordPress 的 404 会带主题样式,是一整页。

这两个区别很重要:

  • nginx 的 404 → 请求根本没进 PHP,伪静态没配
  • WordPress 的 404 → 进了 PHP,但路由匹配不上,多半是固定链接规则的问题

nginx 的 404:加一行就行

WordPress 需要把所有不存在的路径都交给 index.php 处理。nginx 里对应的规则是:

location / {
    try_files $uri $uri/ /index.php?$args;
}

这一行的意思是:先找同名文件,找不到就找同名目录,还找不到就把请求转给 index.php,参数原样带过去。

?$args 不能省。省了之后带参数的页面会丢参数,比如分页 ?page=2 会变成第一页。

宝塔面板里有个"伪静态"按钮,选 WordPress,它会自动写入这一段。问题是很多人迁移服务器之后忘了点这个按钮。

进了 PHP 还是 404:看固定链接

如果 nginx 规则没问题,但内页还是 404,去后台看"设置 → 固定链接"。

有时候从别的站迁移过来,.htaccess 或者 nginx 规则带过来了,但 wp_options 里的 rewrite_rules 是空的——WordPress 靠这个字段把 URL 映射到查询参数。

解决办法很简单:进固定链接页面,什么都不改,直接点一次"保存更改"。WordPress 会重新生成规则。

我遇到过一次更怪的:保存了也没用,因为主题里注册了一个自定义文章类型,注册代码在 after_setup_theme 之前执行,规则生成时这个类型还不存在。把注册代码挂到 init 钩子上就好了。

几个容易踩的细节

location 的优先级。

nginx 匹配顺序是:= 精确 → ^~ 前缀且不再匹配正则 → 正则 ~ 和 ~* → 普通前缀。

如果你写了:

location ~* \.(jpg|png|css|js)$ {
    expires 30d;
}

这条正则的优先级高于普通前缀的 location /。所以图片能正常加载,但页面走的是 location / 里的 try_files。逻辑上没问题。

但如果你写成:

location / {
    return 404;
}

那就全站 404,包括 try_files——因为你没写 try_files。

rewrite 和 try_files 别混用。

有些老教程写的是这种:

if (!-e $request_filename) {
    rewrite ^(.*)$ /index.php?$1 last;
}

能用,但 if 在 nginx 里是"evil if",容易出玄学问题。try_files 是官方推荐写法,效率也更高。

子目录安装。

如果 WordPress 装在 /blog/ 这样的子目录,规则要改:

location /blog/ {
    try_files $uri $uri/ /blog/index.php?$args;
}

路径少写一个 /blog/,就会 404。

排查顺序总结

下次再遇到,按这个走:

  1. curl -I 看 404 是 nginx 还是 WordPress 返回的
  2. nginx 的 → 检查 try_files 有没有写
  3. WordPress 的 → 后台固定链接点一次保存
  4. 还不行 → 看 /www/wwwlogs/站点.error.log,里面会有具体哪一行配置出错
  5. 最后才怀疑主题或插件

我处理过的这类问题,八成在第一步就能定位。

伪静态这事没有玄学。404 是 nginx 给的还是 PHP 给的,一看就知道问题在哪一层。

俗人源码网免责声明:

1、本站所有资源均收集于互联网,分享目的仅限学习与参考。如有侵权,请联系 1685698671@qq.com 及时删除!

2、本站资源不保证完整性和安全性,下载后请自行检测。使用过程中出现的任何问题均与本站无关,敬请自行处理。

3、本站资源仅限个人学习研究使用,严禁用于任何违法违纪用途。因使用者违规使用产生的一切后果,由使用者自行承担,本站不承担任何责任。