.htaccess必须放在项目根目录而非public目录,因其作用是拦截对app/、config/等同级敏感目录的直接访问,防止源码泄露;若放public内则完全无效。

.htaccess 必须放在项目根目录,不能放 public 目录里。
ThinkPHP 6+ 的 .htaccess 文件作用是拦截对 app/、config/、route/、.env 等敏感目录的直接访问,防止源码泄露。而这些目录和文件都位于项目根目录下(与 public/ 同级),所以 .htaccess 必须放在项目根目录,才能对它们生效。
如果把 .htaccess 放进 public/ 目录,它只会影响 public/ 及其子目录(比如 public/static/),对同级的 app/、config/ 完全不起作用——浏览器仍可直接请求 https://example.com/config/database.php 并看到明文配置。
Apache 的 AllowOverride All 也必须配置在项目根目录对应的 <directory></directory> 块中,否则 .htaccess 不会被读取。
将 WCAG 2 AA 无障碍标准应用于设计系统、UI 组件和网页——通过可运行的验证器进行对比度计算,采用设计 token 模式使颜色天生可访问,设定排版和焦点状态规则,并提供语义检查清单。适用于构建或审查 UI。
立即学习“PHP免费学习笔记(深入)”;
常见正确结构:
/myapp/ ← 项目根目录(.htaccess 在这里) ├── .htaccess ← ✅ 正确位置 ├── app/ ├── config/ ├── public/ ← Web 服务器 document_root 指向这里 │ ├── index.php │ └── static/ ├── runtime/ └── vendor/
补充说明:
- Nginx 用户不用
.htaccess,所有安全规则需写在server块中,用location ^~ /app/等方式显式禁止访问。 - 如果你用的是 Apache +
public/为网站根目录(推荐做法),那.htaccess仍要放在项目根目录,并依赖 Apache 虚拟主机配置中的AllowOverride All和对应<directory></directory>指向项目根路径(不是public/路径)。
简而言之:
-
.htaccess的位置取决于它要保护谁 → 它要保护项目根下的敏感目录 → 所以它必须在项目根目录。 - Web 服务器的
document_root指向public/,但.htaccess的生效范围由<directory></directory>配置决定,不是由document_root决定。


















