ThinkPHP伪静态规则怎么在FastPanel用_ThinkPHPFastPanel伪静态说明【解答】
先说一个基本判断:宝塔Linux面板是目前国内使用最广的 Linux 服务器可视化管理工具,支持一键 LAMP/LNMP、网站/FTP/数据库/Ja va 等上百项功能,安全防护、资源监控、文件管理、软件商店都整合得很好。官方最新正式版是 11.7.0。 需要澄清一下:市场上不存在所谓叫“FastP
先说一个基本判断:宝塔Linux面板是目前国内使用最广的 Linux 服务器可视化管理工具,支持一键 LAMP/LNMP、网站/FTP/数据库/Ja va 等上百项功能,安全防护、资源监控、文件管理、软件商店都整合得很好。官方最新正式版是 11.7.0。

需要澄清一下:市场上不存在所谓叫“FastPanel”的官方产品。如果你看到有人提“FastPanel”,大概率是误传、第三方魔改版,或者把 FastAdmin(一个基于 ThinkPHP 的后台框架)和宝塔面板搞混了。所以,所有关于 ThinkPHP 的伪静态配置,归根结底还是在宝塔面板的「网站设置 → 伪静态」里完成。
宝塔里选 thinkphp 模板就完事?不一定
宝塔内置那个 thinkphp 伪静态模板,默认生成的规则是 PATHINFO 模式:if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; }。这套规则对 ThinkPHP 5/6 默认开启 url_pathinfo 且没改 URL_MODEL 的场景是 ok 的。但问题在于,下面几种情况直接套模板就会翻车:
- ThinkPHP 6+ 开启了
route_url_convert或自定义了url_domain_deploy - 项目部署在子目录(比如
https://example.com/admin/),而规则里没考虑子目录前缀 - 用了 Swoole 或 RoadRunner 这种常驻进程模式,Nginx 还在按传统 PHP-FPM 规则转发
- FastAdmin 启用了插件路由(比如
addon_url生成的/mydemo/test/myname.html),但规则没兼容.html后缀
这时候,最稳的做法是手动替换成 try_files 写法:
location / {
try_files $uri $uri/ /index.php?s=$uri&$args;
}
注意一个小细节:这里用 $uri 而不是 $request_uri,目的是避免出现双问号;&$args 保证 GET 参数不会丢失。
为什么访问还是 404?先查这三处
规则保存完、Nginx 重载后依然 404,别急着改规则。大概率是请求根本没到 PHP 层。几个常见的“断裂点”:
index.php文件权限设成了 600,Nginx 用户读不到 —— 改成644- ThinkPHP 的
APP_DEBUG关了,同时route_check没开,导致路由根本没注册 —— 去config/route.php检查一下是否 return 了完整的路由数组 - FastAdmin 后台里,「系统 → 系统参数 → URL 模式」选了「兼容模式」,却配了 PATHINFO 规则 —— 统一改为「重写模式」就行
快速验证的方式也很简单:直接访问 https://yoursite.com/index.php?s=admin/index/login,如果能正常进后台,那说明 PHP 和框架层面没问题,问题就出在伪静态转发这一层。
FastAdmin 插件伪静态要额外加规则
FastAdmin 的插件(比如 mydemo)通过 addon_url() 生成的链接格式是 /mydemo/test/myname.html。但宝塔默认规则只匹配 /index.php?s=xxx,对 .html 后缀的路径完全不处理。需要手动在原有 location 块里追加一条:
location ~ \.html$ {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
}
}
更推荐的做法是合并进主 location,统一用命名 location 转发:
location / {
try_files $uri $uri/ @rewrite;
}
location @rewrite {
rewrite ^(.*)$ /index.php?s=$1 last;
}
这样,不管是 /admin 还是 /mydemo/test.html 都会被捕获到 index.php,接着由 ThinkPHP 路由解析。
最后提醒一点:FastAdmin 插件伪静态能不能正常工作,关键在于 PHP 层的配合——url_html_suffix 配置和 addon_url 函数调用方式。如果插件 config.php 里 'url_html_suffix' => 'html' 没启用,或者生成链接时用的是硬编码 URL 而不是 addon_url('mydemo/index/index'),那 Nginx 规则再全也没用。这往往是容易被忽略的断层点。


































