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/ 路径。
步骤 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