入口文件报错八成非代码问题,而是根目录未指向public/、伪静态未选ThinkPHP6、或open_basedir未包含项目及public目录。

入口文件报错,八成不是代码问题,而是根目录、伪静态或 open_basedir 配置没对齐框架要求。
网站根目录必须指向 public/ 目录
ThinkPHP 6+ 强制要求入口文件 index.php 位于 public/ 子目录中。宝塔或 Nginx 默认把网站根目录设在项目顶层(含 app、config、public 的那层),这会导致 PHP 找不到自动加载器,直接报 Class 'think\App' not found 或 500 错误。
- 登录宝塔 → 网站 → 编辑对应站点 → “网站目录” → 将根目录路径从
/www/wwwroot/your-project改为/www/wwwroot/your-project/public - 确认
public/index.php文件存在且权限为 644,所属用户与宝塔运行用户(通常是www)一致 - 切勿手动把
index.php剪切到上层目录——这会破坏 PSR-4 自动加载路径,vendor/autoload.php就找不到thinkphp/了
伪静态规则必须选 ThinkPHP 6,不是 ThinkPHP
宝塔新建站点时默认启用的“ThinkPHP”伪静态是 TP5 规则,对 TP6 路由解析不兼容;选“Laravel”或留空则所有非首页路由 404。
- 进入宝塔网站设置 → “伪静态”选项卡 → 明确选择
ThinkPHP 6(注意后缀数字) - 若无此选项,手动粘贴 Nginx 规则:
location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; } } - Apache 用户需确保
.htaccess在public/下,且已启用mod_rewrite;宝塔 Apache 环境下直接选模板更稳妥
open_basedir 限制导致 require() 失败
错误信息如 Warning: require(): open_basedir restriction in effect. File(...) is not within the allowed path(s),本质是 PHP 安全策略拦住了框架跨目录加载(比如 public/index.php 要 require 上级目录的 thinkphp/base.php)。
立即学习“PHP免费学习笔记(深入)”;
- 不要全局关闭
open_basedir,生产环境极不安全 - 正确做法:在宝塔 PHP 设置 → “配置修改” → 找到
open_basedir行,将其值扩展为包含项目根目录和public目录,例如:/www/wwwroot/your-project:/www/wwwroot/your-project/public:/tmp
- 改完务必重启对应 PHP 版本服务(如 PHP-8.1),否则不生效
入口文件本身被覆盖或路径写错
本地开发正常、部署后报 Fatal error: require(): Failed opening required,大概率是入口文件里用了硬编码相对路径,或部署时漏了关键文件。
- 检查
public/index.php开头的require语句:必须用__DIR__ . '/../vendor/autoload.php',而非./vendor/autoload.php或../vendor/autoload.php - 确认
vendor/autoload.php存在;若缺失,进项目根目录运行composer install - Linux 服务器注意大小写:文件名是
autoload.php,不是Autoload.php;路径分隔符统一用/,避免\导致解析失败
真正容易被忽略的是:子目录部署(如 example.com/tp6/)、多应用模式未配 app/multi_app.php、或 PHP-FPM pool 配置里用 php_admin_value[open_basedir] 覆盖了全局设置——这些场景下,表面看是入口报错,实际是路由或加载器根本没启动。



















