宝塔部署thinkphp 8.0伪静态必须用last重写并设运行目录为/public:单应用规则为if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; },多应用需两段式正则捕获应用名;同时确保php未禁用scandir/putenv/ini_set、版本为8.0.x且扩展齐全。

在宝塔面板上部署 ThinkPHP 8.0 项目时,伪静态规则配错会导致所有路由 404、白屏或跳回首页,根本原因是 Nginx 没把请求正确交到 public/index.php 并传入原始路径参数。
单应用模式:最简可用规则
适用于默认应用(如 frontend/home)且未启用多应用绑定的场景。这一步操作起来很简单,直接复制粘贴即可生效。
进入宝塔「网站设置」→「伪静态」选项卡,在文本框中粘贴以下内容:
if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; }
【必须用 last,不能用 break 或 redirect】——用 break 会导致重写后不再匹配 location,Nginx 直接返回 index.php 源码或 404;last 才能触发二次 location 匹配,确保请求最终由 PHP 处理。
保存后点击「重载 Nginx」,否则规则不生效。
多应用模式:两段式正则捕获
当 config/app.php 中设置了 'app_multi' => true,并存在 app/admin、app/api 等子应用时,必须区分请求路径中的应用前缀,否则 /admin/login 会被当作默认应用下的控制器处理。
方法一:标准两段式规则(推荐)
在「伪静态」文本框中替换为:
if(!-e $request_filename) {
rewrite ^/([a-z0-9A-Z_\-]+)/(.*)$ /index.php?s=/ last;
rewrite ^/(.*)$ /index.php?s= last;
}
第一行匹配带应用名的请求(如 /admin/login → s=admin/login),第二行兜底处理根路径和静态资源(如 /static/js/app.js)。
方法二:兼容中文与下划线命名的应用
若应用名为 user_v2 或 后台,则正则字符集需扩展为 [a-z0-9A-Z_\u4e00-\u9fa5\-],完整规则为:
if(!-e $request_filename) {
rewrite ^/([a-z0-9A-Z_\u4e00-\u9fa5\-]+)/(.*)$ /index.php?s=$1/$2 last;
rewrite ^/(.*)$ /index.php?s=$1 last;
}
注意:宝塔界面不支持 Unicode 正则高亮,但 Nginx 实际可解析;粘贴后务必重载 Nginx,否则中文应用名无法匹配。
运行目录与 PHP 配置联动校验
伪静态规则再准,若基础环境没对齐,照样 404。必须同步检查三项:
第一步:确认网站「运行目录」设为 【/public】 —— 在网站设置 → 「网站目录」→ 下拉选择 /public,不可手输、不可留空、不可选项目根目录。
第二步:检查 PHP 禁用函数列表,确保 scandir、putenv、ini_set 三项已从 disable_functions 中移除。路径:软件商店 → 对应 PHP 版本 → 设置 → 配置修改 → 搜索 disable_functions。
第三步:确认 PHP 版本为 8.0.x(禁用 8.3+),并启用 fileinfo、openssl、mbstring、pdo_mysql、redis 扩展;全部启用后点击「重启 PHP」。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











