WordPress 改完固定链接文章全 404?别重装:宝塔 / Nginx 伪静态按这 4 步对齐
适用场景:宝塔面板 + Nginx(或 Apache)部署 WordPress;后台把固定链接从「朴素」改成「文章名」等漂亮链接后,首页能开,文章 / 页面 / 分类一打开就是 404。
写作原则:先分清「是不是伪静态问题」,再按层对齐;多数站 5~10 分钟就能修好,不必重装站点。
先说结论
漂亮固定链接要同时满足两件事:
- 服务器能把「看起来像静态路径」的请求,转交给 WordPress 的
index.php处理 - WordPress 后台已保存过对应的固定链接结构,内部重写规则是新的
只改后台、不配伪静态 → 前台 404。
只配伪静态、不点保存固定链接 → 有时也会 404 或链接结构仍旧。
首页能开、文章 404,优先怀疑伪静态,而不是数据库坏了、主题坏了、要重装。
30 秒自检:先确认你卡在哪一层
按下面顺序测,别一上来就改服务器配置。
| 测试 | 怎么做 | 结果怎么读 |
|---|---|---|
| A. 朴素链接是否正常 | 后台 → 设置 → 固定链接,临时选「朴素」(形如 /?p=123),保存后访问一篇文章 | 能开:站点本身正常,问题在「漂亮链接 ↔ 伪静态」;仍 404:先查站点是否指向错目录、PHP 是否异常 |
| B. 是否只有文章 404 | 访问首页、后台、/?p=文章ID | 首页和后台正常、只有漂亮 URL 挂 → 典型伪静态问题 |
| C. 是否刚改过环境 | 新装宝塔、从 Apache 迁到 Nginx、换过域名 / 子目录 | 旧规则没带过来,很常见 |
测完再进下面 4 步。改完一层,就用一篇真实文章 URL 验证一次,别一口气改五处。
第 1 步:在宝塔里给站点挂上 WordPress 伪静态
Nginx(宝塔最常见)
- 登录宝塔面板
- 左侧 网站 → 找到你的站点 → 设置
- 打开 伪静态
- 下拉菜单选择 wordpress(有的版本写作
wordpress/wp) - 点 保存
宝塔预设里,核心一般是这段(与 WordPress 官方 Nginx 文档思路一致):
location / {
try_files $uri $uri/ /index.php?$args;
}
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
含义很直白:
- 先看磁盘上有没有真实文件 / 目录
- 没有,就交给
/index.php,并把查询参数带上(?$args很重要,不然部分带参数的漂亮链接会异常) - 顺带把访问
/wp-admin(无尾斜杠)规范成/wp-admin/
保存后,一般规则会立刻进站点配置。若你手动改过「配置文件」,保存伪静态时注意:不要把完整的 server { ... } 整段贴进伪静态框,伪静态区域只放 location / rewrite 片段。
如果下拉没有 wordpress,或保存后仍 404
在伪静态文本框里手动粘贴上面那段核心规则,再保存。
然后到宝塔 软件商店 → Nginx → 重载配置(或「重载」),避免旧 worker 仍用旧规则。
Apache(相对少,但也会踩)
Apache 主要依赖站点根目录的 .htaccess。请确认:
- 根目录存在
.htaccess,且 WordPress 有权限写入 - 虚拟主机允许覆盖(常见要求
AllowOverride All) - 后台重新保存一次固定链接,让 WordPress 重写
.htaccess
.htaccess 被删、权限只读、或面板开了「禁止修改」时,漂亮链接同样会 404。
第 2 步:回到 WordPress,重新保存固定链接
伪静态配好后,务必做这一步(很多人漏):
- 登录后台
- 设置 → 固定链接
- 选择你需要的结构(企业站 / 博客常见选 文章名,即
/%postname%/) - 什么都不改也可以,直接点底部 保存更改
这一步会刷新 WordPress 内部的重写规则。
官方文档也说明:漂亮固定链接依赖服务器侧正确配置;保存设置是让 WordPress 与服务器规则对齐的标准操作。
结构怎么选(实用建议)
| 选项 | 示例 | 适用 |
|---|---|---|
| 朴素 | /?p=123 | 仅排障临时用,不适合正式站 |
| 文章名 | /hello-world/ | 多数内容站、企业站首选 |
| 数字 | /archives/123 | 也可,但可读性一般 |
| 自定义 | /%category%/%postname%/ | 可以,但分类调整后 URL 易变,改结构前先想清楚 301 |
英文 slug 更稳;中文 slug 能用,但在部分 CDN、下载、邮件客户端里偶发兼容问题。新站尽量用有意义的英文短横线 slug。
第 3 步:清缓存后再测(避免「修好了但你还在看旧 404」)
伪静态和固定链接都保存后:
- 若装了缓存插件(WP Rocket、LiteSpeed Cache、WP Super Cache、W3 Total Cache 等)→ 清空全部缓存
- 若前面还有 Cloudflare / 国内 CDN → 到 CDN 控制台做一次 清除缓存,或临时对 HTML 开开发模式再测
- 浏览器无痕窗口打开:首页 → 点进一篇文章 → 再测一个页面、一个分类
判断标准:
- 漂亮 URL 能打开,且地址栏不再回到
?p=→ 本层完成 - 仍 404 → 进入第 4 步,查冲突,而不是反复重装 WordPress
第 4 步:仍 404 时,按这张冲突清单往下排
下面这些是实战里「伪静态看起来选了 wordpress,却仍然 404」的高频原因。
1)站点根目录指错了
宝塔「网站」里的 根目录 必须指向 WordPress 的安装目录(里面有 wp-config.php、wp-admin、index.php)。
指到上一级空目录、或旧站残留目录,会出现各种奇怪 404。
2)配置文件里有第二个 location /
打开站点 设置 → 配置文件,搜索 location /。
若伪静态写了一套,配置文件里又手写了一套且互相覆盖,try_files 可能根本没生效。
处理原则:
- 伪静态框负责 WordPress 重写
- 其它自定义规则尽量写成更具体的
location,避免再造一个笼统的location /
改完后 重载 Nginx,再测。
3)子目录安装 WordPress
若站点装在 https://example.com/blog/ 这类子目录:
- 伪静态仍要有
try_files ... /index.php?$args;(相对该站点 server 的根) - 后台 设置 → 常规 里的「WordPress 地址 / 站点地址」要带上
/blog - 子目录场景比根目录更容易配错,改完两边都要测
4)只开了 HTTPS,但站点地址还是 http
这不一定直接导致「文章 404」,但常伴随跳转混乱、资源异常。请核对:
- 宝塔已部署证书并勾选强制 HTTPS
- 后台 设置 → 常规 两个地址都是
https://开头
5)安全 / WAF / 防盗链误杀
宝塔防火墙、Wordfence、CDN WAF 偶尔会把带路径的请求拦成 403/404。
可临时对照防火墙拦截日志:若正好卡在文章 URL,先放行再优化规则,而不是关掉所有防护。
6)用「几乎漂亮」的链接做对照
若漂亮链接一直失败,可临时把固定链接设成:
/index.php/%postname%/
这类「Almost Pretty」对重写要求更低。
若这种能开、纯漂亮不能开,基本就坐实:服务器重写规则仍未生效,继续查 Nginx / .htaccess,而不是查主题。
一张对照表:现象 → 优先查什么
| 现象 | 优先处理 |
|---|---|
| 首页正常,文章漂亮 URL 404 | 宝塔伪静态选 wordpress + 重载 Nginx |
| 改完固定链接立刻全站内页 404 | 伪静态未保存 / 被配置文件覆盖 |
/?p=ID 正常,文章名 404 | 典型重写未生效 |
| 后台也 404 | 先查根目录、Nginx 配置语法、PHP;不一定是固定链接 |
| 清缓存前偶发好偶发坏 | 页面缓存 / CDN 缓存旧响应 |
| 只有某个固定分类路径 404 | 查分类 slug、重定向插件、是否手写了冲突 rewrite |
修好后建议固定下来的习惯
- 新站上线清单里写死两行: 伪静态 = wordpress;固定链接保存一次
- 迁服务器 / 换 Nginx / 改根目录后,把「伪静态 + 保存固定链接」当必做项
- 不要频繁改 URL 结构;已经有收录的老站改结构,要配套 301,否则是 SEO 问题,不是伪静态问题
- 排障时优先用「朴素链接能否打开」一刀切开:能开就别重装
小结
WordPress「改完固定链接就 404」,在宝塔环境下绝大多数不是程序坏了,而是:
服务器重写(伪静态) 和 后台固定链接规则 没有对齐。
按本文顺序做:
- 自检确认是漂亮链接问题
- 宝塔伪静态选 / 粘贴 WordPress 规则并保存(必要时重载 Nginx)
- 后台再保存一次固定链接
- 清缓存;仍失败再查根目录、重复
location /、子目录、WAF
把这 4 步当成标准动作,比「重装 WordPress / 换主题碰运气」可靠得多。
如果你正在做企业站或内容站的基础运维,也可以把这类「上线必检项」收进自己的维护清单;我在 数据高原 也会持续整理这类可复用的 WordPress 实操笔记,方便对照排查。
参考(便于自行复核)
- WordPress 官方文档:Customize permalinks
- WordPress 官方 Nginx 配置说明中的
try_files $uri $uri/ /index.php?$args;写法:Nginx
2039



被折叠的 条评论
为什么被折叠?



