ThinkPHP 6.0 默认入口文件是public/index.php,作为唯一Web可访问脚本,其设计旨在保障安全;其他目录如app、config、vendor须置于Web根目录外。

ThinkPHP 6.0 的默认入口文件是 public/index.php,它被设计为唯一可被 Web 服务器直接访问的脚本,其他目录(如 app、config、vendor)应处于 Web 根目录之外,以保障安全。修改入口文件位置或名称不是必须操作,但确有实际需求时(如兼容旧部署结构、配合特定服务器配置),需同时调整路径引用与服务器规则。
一、将入口文件移到 Web 根目录下(如改为 index.php)
这是最常见的一种调整方式,适用于希望项目根目录即为 Web 可访问根目录的场景(不推荐,但部分老旧环境需要):
- 把
public/index.php复制或剪切到项目根目录(与application同级),重命名为index.php - 编辑该新
index.php,修改两处路径:- 原:
define('APP_PATH', __DIR__ . '/../application/');
改为:define('APP_PATH', __DIR__ . '/application/'); - 原:
require __DIR__ . '/../vendor/autoload.php';
改为:require __DIR__ . '/vendor/autoload.php';
- 原:
- 确保 Web 服务器(Apache/Nginx)的网站根目录已指向项目根目录(而非原来的
public目录) - 删除或禁用原
public目录下的.htaccess(Apache)或 Nginx 伪静态规则,改用新根目录下的对应规则
二、自定义入口文件名(如 admin.php、manage.php)
可用于分离前后台、增强安全性或适配运维规范:
- 在
public目录下新建文件,例如manage.php - 内容与
index.php基本一致,仅调整关键常量或逻辑(如绑定模块):<?php // [后台专用入口] define('APP_PATH', __DIR__ . '/../application/'); // 强制绑定 admin 模块 $_GET['s'] = '/admin/index/index'; require __DIR__ . '/../vendor/autoload.php'; $http = (new \think\App())->http; $response = $http->run(); $response->send(); $http->end($response); - Apache 下需确保
DirectoryIndex包含该文件名(如DirectoryIndex manage.php index.php),或直接通过https://domain.com/manage.php访问 - Nginx 用户需在 server 块中显式允许该文件执行(避免被拒)
三、完全隐藏或禁用默认入口(仅通过路由转发)
适用于 API 服务或微前端集成等场景,不暴露任何 PHP 入口文件名:
立即学习“PHP免费学习笔记(深入)”;
- 保留
public/index.php不动,但通过 Web 服务器重写所有请求到它 - Apache:确认
.htaccess已启用,且包含标准 ThinkPHP 重写规则(见后文) - Nginx:使用
try_files规则兜底,例如:location / { try_files $uri $uri/ /index.php?s=$uri&$args; } - 此时用户访问
/user/list会自动由index.php接收并解析,无需在 URL 中出现index.php
四、注意事项与验证要点
无论哪种修改,都必须检查以下几项才能确保正常运行:
-
路径引用是否全部更新:包括
APP_PATH、vendor/autoload.php、静态资源(CSS/JS)的相对路径 -
Web 服务器权限:确保新入口文件及其所在目录对 PHP 进程可读,且无禁止执行的限制(如 Apache 的
Require all denied) -
PATH_INFO 或 QUERY_STRING 传递:Nginx 默认不传 PATH_INFO,需用
s=参数方式;Apache 需开启mod_rewrite并设置AllowOverride All -
缓存清理:修改入口或路由后,务必执行
php think route:clear和php think cache:clear -
安全边界:若将入口移出
public,请确保application、config等敏感目录无法被浏览器直接访问(可通过服务器配置deny all或放置于 Web 根目录外)



















