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

文章导读
Typecho 开启伪静态后 Nginx 返回 404 错误,通常是因为 Nginx 未开启 Pathinfo 支持或伪静态规则配置不正确。解决重点是修改 Nginx 配置文件加载 Typecho 专用伪静态规则,并确保 PHP 配置允许 Pathinfo 传递。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

Typecho 开启伪静态后 Nginx 返回 404 错误,通常是因为 Nginx 未开启 Pathinfo 支持或伪静态规则配置不正确。解决重点是修改 Nginx 配置文件加载 Typecho 专用伪静态规则,并确保 PHP 配置允许 Pathinfo 传递。

先说结论:该问题主要由 Nginx 缺少 Pathinfo 支持或伪静态规则未匹配 Typecho 路由结构导致,需调整 PHP 配置与 Nginx Rewrite 规则。

  • 先确认:检查 Nginx 是否加载了 enable-php-pathinfo.conf 或等效配置。
  • 先处理:在站点配置中引入 Typecho 专用伪静态规则(typecho.conf)。
  • 再验证:访问后台登录页及文章详情页,确认 404 消失。

命令速用版

若使用 LNMP 环境,可直接修改 Nginx 配置文件。以下配置片段支持 Pathinfo 并处理 Typecho 路由:

location ~ .*\.php(\/.*))*$ {\n    fastcgi_pass unix:/tmp/php-cgi.sock;\n    fastcgi_index index.php;\n    include fastcgi.conf;\n    include pathinfo.conf;\n}\n\nlocation / {\n    if (!-e $request_filename) {\n        rewrite ^(.*)$ /index.php$1 last;\n    }\n}

若使用宝塔面板,在网站设置中找到伪静态选项,直接选择 typecho 规则并保存。

为什么会这样

Typecho 依赖 Pathinfo 模式解析 URL 路径,而 Nginx 默认不支持 Pathinfo。当开启伪静态后,请求类似 index.php/archive/123 的链接时,若 Nginx 未正确分离脚本名与路径信息,PHP 无法识别路由,从而返回 404。此外,若伪静态规则将请求重定向到根目录 index.php 而非实际安装目录,也会导致文件找不到。

分步处理

步骤 1:检查 PHP Pathinfo 配置
找到 Nginx 配置文件中的 PHP 处理段。若使用 LNMP 一键包,将 include enable-php.conf 修改为 include enable-php-pathinfo.conf。若手动配置,确保 location 匹配 .*\.php(\/.*))*$ 并包含 pathinfo.conf 或设置 fastcgi_param PATH_INFO。

步骤 2:加载 Typecho 伪静态规则
在 Nginx 站点配置文件中,找到伪静态 include 行。将 include other.conf 或 none.conf 修改为 include typecho.conf。若没有现成文件,可手动添加 rewrite ^(.*)$ /index.php$1 last; 规则。

步骤 3:处理二级目录安装
若 Typecho 安装在二级目录(如 /blog/),需修改 rewrite 规则为 rewrite ^(.*)$ /blog/index.php$1 last; 并确保 location 块匹配 /blog/ 路径。

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

步骤 4:重启 Nginx
配置修改后必须重启服务生效。执行命令 nginx -s reload 或 systemctl restart nginx。

怎么验证是否生效

完成配置后,打开浏览器访问 Typecho 后台登录页面(通常为 /admin/)。若不再报 404 且能正常显示登录框,说明 Pathinfo 已生效。接着点击前台任意文章链接,若内容能正常加载而非 404 页面,说明伪静态规则已正确匹配路由。

常见坑

宝塔面板默认伪静态冲突:宝塔默认开启的伪静态可能与 Typecho 永久链接设置冲突,需在面板网站设置中切换为 Typecho 兼容模式。
HTTPS 跳转问题:若配置了 HTTPS,需在 config.inc.php 中添加 define('__typecho_secure__', true); 否则后台资源可能加载失败。
反向代理拦截:若 Nginx 同时配置了反向代理,伪静态规则优先级可能高于代理,需给 rewrite 规则添加排除条件。

常见问题

为什么首页能打开但后台报 404?

因为首页是静态文件或直接索引,后台及文章页依赖 Pathinfo 路由。未开启 Pathinfo 支持时,动态路由请求会被 Nginx 视为不存在文件。

LNMP 环境必须修改哪个配置文件?

通常需要修改/usr/local/nginx/conf/vhost/域名.conf 加载 typecho.conf,并修改 enable-php.conf 为 enable-php-pathinfo.conf。

修改配置后需要重启服务器吗?

不需要重启服务器,只需重启 Nginx 服务即可使配置生效。

参考来源

  • Typecho 安装后后台 404 报错解决,https://blog.ybyq.wang/archives/596.html
  • typecho 在 nginx 登录后台出现 404
  • Typecho 安装后后台界面和文章链接均为 404 错误的解决方法
  • 关于 typecho 安装以后 Nginx 报 404 问题
  • 关于 Typecho 在 Nginx 环境下登录或是查看文章 404 的情况
  • CentOs7.x + 宝塔 Linux + Typecho 路径 404 问题
  • lnmp1.4 环境 typecho 伪静态及后台 404