COMPOSER_HTACCESS_PROTECT 环境变量控制 composer install/update 时是否在 vendor/ 下生成 .htaccess 文件,默认为1(开启),设0则跳过;该文件用于 Apache 环境下禁止直接访问 vendor/ 中的敏感文件,内容为“RewriteEngine Off”和“Deny from all”,属纵深防御措施,但不可替代正确部署(如将 vendor/ 移出 Web 根目录)。

COMPOSER_HTACCESS_PROTECT 环境变量控制是否生成 .htaccess 文件
这个环境变量只在运行 composer install 或 composer update 时起作用,决定 Composer 是否在 vendor/ 目录下自动生成保护性的 .htaccess 文件。它的默认值是 1(开启),设为 0 则跳过生成。
为什么需要这个 .htaccess 文件?
Apache 环境下,若未做额外配置,直接访问类似 https://example.com/vendor/autoload.php 可能导致敏感文件被读取或执行,尤其当 vendor/ 被意外暴露在 Web 根目录下时。该 .htaccess 文件内容极简:
RewriteEngine Off Deny from all
它通过 Apache 的访问控制机制阻止所有对 vendor/ 下文件的 HTTP 请求,属于纵深防御的一环。
哪些情况要关掉它?
- 你用的是 Nginx ——
.htaccess完全不生效,留着反而可能误导人以为“已防护” - 你的部署流程会自动清理或覆盖
vendor/下所有非必要文件(包括.htaccess) - 你已在 Web 服务器全局配置中严格禁止了
/vendor/路径(比如 Nginx 的location ~ ^/vendor/块),且确认生效 - 你在 CI/CD 中运行 Composer,但构建产物不包含
.htaccess(例如打包时被.gitignore过滤)
关闭方式很简单:COMPOSER_HTACCESS_PROTECT=0 composer install,或在 shell 中先 export COMPOSER_HTACCESS_PROTECT=0。
它不能替代真正的安全措施
这个机制只针对 Apache + 默认配置的“最低防护”,且仅作用于 vendor/ 目录。它不防:
- composer.json 或 composer.lock 被直接下载(它们没被 .htaccess 覆盖)
- 其他敏感路径如 config/、storage/、.env
- PHP 解析失败导致源码泄露(如 .php 文件被当成纯文本返回)
- Web 服务器本身配置错误(比如 Apache 的 AllowOverride None 让 .htaccess 失效)
真正关键的,是确保 vendor/ 不在 Web 可访问路径下 —— 比如把 public/ 设为 Web 根,而 vendor/ 和应用代码放在其同级目录。










