宝塔如何配置 Nginx 伪静态规则适配 ThinkPHP 项目

文章导读
在宝塔面板中配置 Nginx 伪静态适配 ThinkPHP 项目,最推荐直接在网站设置的“伪静态”选项中选择 thinkphp 预设规则。适用场景为 ThinkPHP 5/6 标准结构项目,风险边界在于必须将网站运行目录指向 `/public`,否则存在源码泄露风险。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

在宝塔面板中配置 Nginx 伪静态适配 ThinkPHP 项目,最推荐直接在网站设置的“伪静态”选项中选择 thinkphp 预设规则。适用场景为 ThinkPHP 5/6 标准结构项目,风险边界在于必须将网站运行目录指向 `/public`,否则存在源码泄露风险。

先说结论:宝塔面板内置了 ThinkPHP 伪静态模板,无需手动编写规则,但需正确设置运行目录。

  • 适合 ThinkPHP 5/6 标准架构项目,不适用于旧版 TP3 或非标准结构。
  • 先准备确认网站根目录已指向 `/public`,避免暴露系统文件。
  • 验收通过访问非首页路由确认 200 状态,检查 Nginx 错误日志无 rewrite 报错。

命令速用版

宝塔面板主要采用图形化操作,若需手动修改 Nginx 配置文件,可参考以下标准 rewrite 规则片段。

location / {
    if (!-e $request_filename){
        rewrite  ^(.*)$  /index.php?s=$1  last;   break;
    }
}

为什么会这样

ThinkPHP 采用单入口机制,所有请求需经由 index.php 分发。

Nginx 默认只处理静态文件,遇到不存在的路径会返回 404。伪静态规则的作用是将不存在的路径重写指向 index.php,让框架内部路由接管请求。若缺少此规则,除首页外的所有控制器和方法都无法访问。

分步处理

以下操作基于宝塔面板 Linux 版最新界面,不同版本菜单名称可能略有差异。

步骤 1:设置运行目录

进入宝塔面板 > 网站 > 点击对应网站名的“设置” > 找到“网站目录”。

将“运行目录”从 `/` 修改为 `/public`。此步骤至关重要,未修改会导致 .env 等敏感文件可被直接下载。

步骤 2:应用伪静态规则

在同一设置页,点击左侧“伪静态”。

宝塔如何配置 Nginx 伪静态规则适配 ThinkPHP 项目

在下拉菜单中选择 `thinkphp` 或 `thinkphp5`。

点击“保存”按钮。

步骤 3:检查配置文件

若下拉菜单无选项,点击“当前规则”文本框,手动粘贴上述“命令速用版”中的代码,保存。

怎么验证是否生效

方法 1:浏览器访问测试

访问一个非首页路由,例如 `http://你的域名/admin/login`。

若页面正常显示且 URL 未变为 `index.php?s=...`,说明规则生效。

方法 2:命令行状态检查

使用 curl 命令检查 HTTP 状态码:

宝塔如何配置 Nginx 伪静态规则适配 ThinkPHP 项目
curl -I http://你的域名/admin/login

返回 header 中 `HTTP/1.1 200 OK` 表示成功,若返回 404 则规则未生效。

方法 3:查看 Nginx 日志

查看宝塔面板 > 网站 > 设置 > 日志,确认无 rewrite 相关报错。

常见坑

运行目录未修改:这是最高频风险。ThinkPHP 6 要求 Web 根目录必须是 public,否则配置文件密码可能泄露。

规则不兼容:ThinkPHP 5 和 6 规则基本通用,但 TP3 规则不同。若项目较老,需选择对应的 old 版本规则。

子目录部署:若项目放在子目录(如 `/tp`),伪静态规则中的 `index.php` 前需加上子目录路径,否则跳转错误。

常见问题

ThinkPHP 5 和 6 的伪静态规则一样吗?

基本一样,宝塔面板中的 thinkphp 预设通常兼容 5 和 6 版本。

配置后首页能访问但其他页面 404 怎么办?

检查运行目录是否已设为 `/public`,并确认伪静态规则已点击保存。

子目录安装 ThinkPHP 如何配置伪静态?

需在规则中的 rewrite 目标前加上子目录名,例如 `/sub/index.php?s=$1`。

参考来源

ThinkPHP 官方文档 - 服务器配置 https://doc.thinkphp.cn/