Typecho伪静态Nginx完整配置代码
Typecho 后台开启伪静态后,前台文章链接仍然 404,多数情况是 Nginx 没有正确处理 PATH_INFO 参数。
本文给出一段可直接复制的完整配置代码,并说明在宝塔面板和手动编译环境中的落地步骤,照着改完就能让 /archives/1/ 这类链接正常访问。
先确认改哪里:server 段还是站点配置文件
Nginx 的伪静态规则必须写在对应站点的 server { } 块内。
如果你用宝塔面板,进入 网站 → 设置 → 配置文件,找到 server_name 所在的那一段,在 location / { } 内部替换规则。
手动安装的 Nginx 通常改 /etc/nginx/conf.d/你的域名.conf 或 /usr/local/nginx/conf/nginx.conf,改完执行 nginx -t 检查语法,再 nginx -s reload 重载。
判断是否该改这里有一个简单标准:只要 Typecho 首页能打开、后台能登录,但文章页或分类页 404,就说明 PHP 和数据库没问题,缺的只是 URL 重写规则。
完整配置代码,直接替换 location 段
下面这段是 Typecho 在 Nginx 下常用的伪静态写法,核心是 try_files 加 index.php 参数转发。
请把 你的域名 和 PHP版本 换成实际值,宝塔用户可直接保留 enable-php-74.conf 这类已有 include 行。
server {
listen 80;
server_name 你的域名;
root /www/wwwroot/你的站点目录;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php(.*)$ {
fastcgi_pass unix:/tmp/php-cgi-74.sock;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~* /\.(htaccess|git|svn) {
deny all;
}
}
关键点有三个:try_files 负责把不存在的静态路径交给 index.php;fastcgi_split_path_info 负责把 /index.php/archives/1/ 拆成脚本名和 PATH_INFO;fastcgi_param PATH_INFO 负责把拆分结果传给 PHP。
缺任意一项,Typecho 都可能拿不到正确的路由参数。
后台设置与验证:三步确认伪静态生效
配置改完并重载 Nginx 后,先登录 Typecho 后台,进入 设置 → 永久链接,确认已启用地址重写功能,并记下自定义的路径格式。
接着在浏览器直接访问一篇文章链接,例如 https://你的域名/archives/1/。
如果返回 200 并正常显示内容,说明规则已生效。
再用命令行复查一次:
curl -I https://你的域名/archives/1/
返回头里出现 HTTP/1.1 200 OK 即正常;
若仍是 404,优先检查 try_files 是否写在了正确的 location / 内,以及 PHP 的 fastcgi_pass 地址是否和当前 PHP 版本一致。
容易踩的坑:404、500 与路径参数丢失
最常见的报错是 首页正常、文章 404,原因通常是 try_files 写成了 /index.php 但没有带 $is_args$args,导致查询参数丢失。
另一个高频问题是 500 错误,多由 fastcgi_pass 指向了不存在的 socket 或端口引起,宝塔用户可在 软件商店 → PHP 设置 → 配置修改 中查看当前监听方式。
如果文章能打开但分页或评论提交异常,检查 fastcgi_split_path_info 正则是否被其他 location ~ \.php 规则覆盖。
同一台服务器上多个站点共用 Nginx 时,每个站点都要单独配置,不能只在默认站点里写一次。
写在最后
Typecho 伪静态 Nginx 完整配置代码并不复杂,核心就是 try_files 转发加 PATH_INFO 参数传递。
改完先 nginx -t 再重载,用文章链接和 curl -I 双重验证,基本可以覆盖零基础用户遇到的大部分伪静态问题。
若你的环境使用了 CDN 或反向代理,还需确认回源路径没有被改写,否则规则本身正确也可能出现 404。