XAMPP中.htaccess禁止访问.git失效的主因是AllowOverride默认为None,需在httpd.conf中用或硬性配置Require all denied并重启Apache。

直接结论:XAMPP 默认不启用 .htaccess,所以靠 .htaccess 禁止访问 .git 目录大概率失效;必须改 httpd.conf 或虚拟主机配置,并确保 AllowOverride All 已开启(否则 .htaccess 会被忽略)。
为什么 .htaccess 里写 RewriteRule ^\.git - [F,L] 不生效
常见现象是:明明加了 RewriteRule ^\.git - [F,L] 到 .htaccess,但访问 http://localhost/myapp/.git/config 依然能下载文件。
- XAMPP 的默认
httpd.conf中,块里AllowOverride默认是None,意味着所有.htaccess指令被完全忽略 -
RewriteEngine on必须在启用mod_rewrite的前提下才有效,而 XAMPP 默认虽加载该模块,但若AllowOverride None,RewriteEngine在.htaccess里也无效 - Windows 路径分隔符和正则转义容易出错:
^.git应写为^\.git(点需转义),否则匹配的是任意字符 + git
正确做法:改 httpd.conf,用 Directory 块硬性禁止
这是最可靠、无需依赖 .htaccess 的方式,适用于所有 Apache 2.4+(XAMPP 8.x 默认用 2.4)。
- 编辑
C:\xampp\apache\conf\httpd.conf - 在文件末尾添加(路径按你项目实际位置调整):
<directory> Require all denied </directory> - 如果项目在子目录(如
htdocs/blog),路径要写全:"C:/xampp/htdocs/blog/.git",不能用通配符.git/*—— Apache 2.4 不支持这种写法,会报语法错误 - 保存后,必须重启 Apache(通过 XAMPP Control Panel)
同时关闭目录浏览:防止漏掉 index 文件时暴露结构
禁掉 .git 还不够。如果某目录下没 index.html,Apache 仍可能列出整个文件树(含 .env、config.php 等敏感文件)。
- 在同一个
httpd.conf文件中,找到类似这样的块:<directory> Options Indexes FollowSymLinks AllowOverride All Require all granted </directory> - 把
Options Indexes FollowSymLinks改成Options FollowSymLinks(删掉Indexes) - 或者更严格点:改用
Options -Indexes +FollowSymLinks,显式禁用Indexes - 改完务必重启 Apache,否则修改不生效
进阶:用 LocationMatch 统一拦截所有隐藏目录
如果你有多个项目,或想一劳永逸屏蔽 .git、.svn、.env 等, 更灵活:
- 在
httpd.conf中添加:<locationmatch> Require all denied </locationmatch> - 注意:正则中
/\.git(/|$)能匹配/.git和/.git/config,但无法匹配/subdir/.git—— 因为匹配的是 URL 路径,不是文件系统路径 - 若要覆盖子目录下的
.git,必须配合,但 Windows 下路径反斜杠易引发解析问题,不建议新手用
真正麻烦的从来不是加几行配置,而是改完忘了重启 Apache,或者路径写错一个斜杠 —— XAMPP 的日志(C:\xampp\apache\logs\error.log)里会明确报出配置语法错误,比反复试访问靠谱得多。











