在宝塔面板中配置 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:应用伪静态规则
在同一设置页,点击左侧“伪静态”。
在下拉菜单中选择 `thinkphp` 或 `thinkphp5`。
点击“保存”按钮。
步骤 3:检查配置文件
若下拉菜单无选项,点击“当前规则”文本框,手动粘贴上述“命令速用版”中的代码,保存。
怎么验证是否生效
方法 1:浏览器访问测试
访问一个非首页路由,例如 `http://你的域名/admin/login`。
若页面正常显示且 URL 未变为 `index.php?s=...`,说明规则生效。
方法 2:命令行状态检查
使用 curl 命令检查 HTTP 状态码:
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/