1panel中thinkphp伪静态404的核心原因是nginx默认禁用try_files且不传递path_info;须将location /块替换为try_files $uri $uri/ /index.php?s=$uri&args;,并开启tp的url_route_on=>true和url_common=>false。

1Panel 默认不内置 ThinkPHP 伪静态模板,直接套用宝塔或 Nginx 官方规则容易 404,核心问题出在:它对 PATH_INFO 的传递控制更严格,且默认未启用 try_files 回退机制。
为什么 1Panel 里 ThinkPHP 伪静态总 404
常见现象是访问 /index/index 返回 404,但 /index.php?s=/index/index 能正常响应。这说明:
- PHP 本身能运行,
index.php可达 - 服务器没把请求正确转发给
index.php处理,而是当成静态路径去查文件了 -
1Panel的 Nginx 配置默认禁用try_files,也不自动注入fastcgi_param PATH_INFO
1Panel 中必须改的 Nginx 配置项
进入 1Panel → 网站 → 对应站点 → 「配置修改」→ 找到 location / 块(不是 location ~ \.php$),替换为以下内容:
location / {
try_files $uri $uri/ /index.php?s=$uri&args;
}
注意三点:
- 必须保留
&args(即&,不是&),否则 GET 参数丢失 - 不能写
last或break,1Panel的 Nginx 版本(常为 1.22+)对rewrite+last在 root 下行为不稳定 - 如果项目不在网站根目录(比如部署在
/shop/子目录),要把/index.php?s=...改成/shop/index.php?s=...
ThinkPHP 自身要确认的两个开关
仅改 Nginx 不够,框架层也得配合,否则即使重写成功,TP 仍会拒绝解析:
-
'url_route_on' => true必须开启(在config/app.php或app/config.php中) -
'url_common' => false必须为false(关闭普通 URL 模式,强制走路由) - 不要设
'url_html_suffix'为''(空字符串),会导致部分路由匹配失败;设为'html'或保持默认即可
验证是否生效的最快方式
别只刷首页,直接测一个明确路由:
- 先确保
route.php里有类似Route::get('test', 'index/test'); - 浏览器访问
/test—— 应返回控制器输出 - 再访问
/index.php?s=/test—— 应和上面一致,证明 TP 层 OK - 最后访问
/test且状态码是 200(不是 301/302),说明 Nginx + TP 全链路通了
最易被忽略的是 try_files 后面那个 &args:少一个 & 或写成 & 实体,GET 参数就全丢,调试时看着像“路由不生效”,其实是参数根本没传进去。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











