ThinkPHP 的 .htaccess 文件必须放在 public 目录下,因其是前端控制器统一入口所在,Apache 需在此读取规则实现 URL 重写和敏感路径防护;放错位置会导致 404、路由失效或配置泄露。

ThinkPHP 的 .htaccess 文件应该放在项目的根目录(即 Web 服务器能直接访问的入口目录)下,通常是 public 目录。
为什么是 public 目录?
ThinkPHP 5.1+ 默认采用「公共入口」结构,所有 HTTP 请求都应通过 public/index.php 进入。Web 服务器(如 Apache)需要在这个目录中读取并执行 .htaccess,才能实现 URL 重写(隐藏 index.php)、禁止敏感文件访问等安全与路由功能。
- 如果放在项目根目录(含
app/、config/等),Apache 可能无法正确匹配规则,或导致非 public 目录被意外暴露 - 放在
public/下,配合正确的 RewriteBase 设置(如RewriteBase /或RewriteBase /your-project/),才能让重写规则精准作用于入口请求 - 官方骨架和安装包默认已将示例
.htaccess放在public/目录中
常见错误位置及后果
以下位置不推荐:
将 WCAG 2 AA 无障碍标准应用于设计系统、UI 组件和网页——通过可运行的验证器进行对比度计算,采用设计 token 模式使颜色天生可访问,设定排版和焦点状态规则,并提供语义检查清单。适用于构建或审查 UI。
-
根目录(与 public 同级):可能导致 Apache 尝试从非入口路径解析 PHP,引发 404 或安全风险 -
app/或runtime/等子目录:这些目录本就不应被 Web 直接访问,且 .htaccess 在此处无效甚至被忽略 -
public/static/等资源子目录:规则作用范围过小,无法支持全局路由重写
检查与验证方法
确保以下几点即可确认配置生效:
立即学习“PHP免费学习笔记(深入)”;
- 文件路径为
public/.htaccess - Apache 已启用
mod_rewrite,且对应虚拟主机或目录允许使用AllowOverride All - 浏览器访问
http://yoursite.com/index/index能正常响应,而非出现404或显示index.php - 尝试访问
public/.htaccess或app/config/database.php应返回 403(拒绝访问),说明规则中的禁止访问逻辑起效
补充说明(Nginx 用户注意)
Nginx 不读取 .htaccess,需将等效规则(如重写、禁止访问)直接写入服务器配置块中,通常放在 location / 或 location ~ \.php$ 段内。此时无需 .htaccess 文件,也不应将其留在 public 目录造成混淆。


















