Typecho 开启伪静态后 Nginx 配置错误返回 404 怎么办

文章导读
Typecho 开启伪静态后 Nginx 返回 404,通常是因为 Nginx 配置中缺少将不存在文件的请求转发给 index.php 的重写规则。最直接的处理方向是检查 server 块中的 location / 配置,补充 try_files 指令或 rewrite 规则,并在修改后重载 Nginx 服务。
📋 目录
  1. A 命令速用版
  2. B 为什么会这样
  3. C 分步处理
  4. D 怎么验证是否生效
  5. E 常见坑
  6. F 常见问题
A A

Typecho 开启伪静态后 Nginx 返回 404,通常是因为 Nginx 配置中缺少将不存在文件的请求转发给 index.php 的重写规则。最直接的处理方向是检查 server 块中的 location / 配置,补充 try_files 指令或 rewrite 规则,并在修改后重载 Nginx 服务。

先说结论:Nginx 默认不会自动处理伪静态,必须手动配置 rewrite 规则将请求指向 index.php。

  • 先确认 Nginx 配置文件中是否包含 Typecho 专用的 rewrite 规则。
  • 先处理 config 语法检查,确保 nginx -t 通过后再重载。
  • 再验证 404 页面是否消失,同时检查 Nginx 错误日志确认无新报错。

命令速用版

如果当前 Nginx 配置中缺少 rewrite 规则,可在 server 块的 location / 中加入以下标准配置片段。这段配置适用于 Typecho 安装在网站根目录的场景。

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

如果 Typecho 安装在子目录(例如 /blog),需调整 try_files 指向子目录的 index.php。

为什么会这样

Nginx 处理请求的逻辑是优先匹配物理文件,找不到文件且未配置重写规则时直接返回 404 状态码。Typecho 的伪静态功能依赖所有请求最终由 index.php 接收并解析路由,因此需要 Nginx 将不存在的文件请求内部重写给 PHP 入口文件。

缺少 try_files 或 rewrite 指令时,Nginx 认为请求的资源不存在,不会将控制权交给 Typecho 程序,导致浏览器显示 404 Not Found。这不是程序错误,而是 Web 服务器配置缺失。

Typecho 开启伪静态后 Nginx 配置错误返回 404 怎么办

分步处理

按照以下顺序修改配置,每步完成后检查状态,避免配置错误导致服务不可用。

1. 备份当前配置文件
在修改前复制原配置文件,以便出错时快速回滚。执行命令 cp /etc/nginx/conf.d/your_site.conf /etc/nginx/conf.d/your_site.conf.bak。

2. 编辑 Nginx 配置
打开站点配置文件,找到 server 块。检查是否存在 location / 块。如果没有,添加上述命令速用版中的 location 配置。如果已有 location /,确保包含 try_files $uri $uri/ /index.php?$args; 这一行。

3. 检查配置语法
保存文件后,执行 nginx -t 命令。输出显示 syntax is ok 和 test is successful 才能进行下一步。如果报错,根据提示行号修正拼写或括号。

Typecho 开启伪静态后 Nginx 配置错误返回 404 怎么办

4. 重载 Nginx 服务
语法检查通过后,执行 nginx -s reload 或 systemctl reload nginx。不要使用 restart,以免中断现有连接。

怎么验证是否生效

配置重载后,通过浏览器访问之前返回 404 的文章链接或分类页面。页面正常显示且 URL 保持伪静态格式即为生效。

命令行验证可执行 curl -I https://你的域名/文章路径。观察 HTTP 状态码,生效时应返回 200 OK。如果仍返回 404,检查 Nginx 错误日志 /var/log/nginx/error.log,确认是否有权限错误或 PHP-FPM 连接失败。

常见坑

1. 子目录安装未调整路径
如果 Typecho 安装在 /blog 目录,try_files 最后一项应改为 /blog/index.php?$args,否则 PHP 找不到入口文件。

2. 伪静态规则与缓存插件冲突
部分缓存插件会生成静态 html 文件,可能导致 Nginx 优先匹配静态文件而绕过 PHP。若开启缓存,需确认缓存生成路径与 rewrite 规则不冲突。

Typecho 开启伪静态后 Nginx 配置错误返回 404 怎么办

3. HTTPS 重定向干扰
如果在 Nginx 中配置了强制 HTTPS 重定向,确保重定向规则在 rewrite 规则之前执行,避免循环重定向导致 404 或 500 错误。

常见问题

配置生效后首页正常但文章页 404 怎么办

检查 Typecho 后台固定链接格式设置是否与 Nginx 规则匹配。确保后台选择的伪静态格式是 Nginx 支持的类型,通常选择默认格式即可。

Nginx 重启后配置丢失是什么原因

确认修改的是正确的配置文件路径。某些面板工具会生成独立配置文件,直接修改 include 引用的源文件可能不会被主配置加载。

是否需要重启 PHP-FPM 服务

不需要。Nginx 配置修改只涉及 Web 服务器层,只要 PHP-FPM 运行正常,重载 Nginx 即可生效,无需重启 PHP 服务。