我已开始使用 git 部署网站进行测试。如何防止 apache 提供 .git 目录内容?
我试过
<Directorymatch "^/.*/\.svn/">
Order deny,allow
Deny from all
</Directorymatch>
但没有成功。
我知道我可以在每个 .git 目录中创建一个 .htaccess 文件并拒绝访问,但我希望将其放入主配置文件中,使其在所有网站上都具有全局性。
答案1
这与许多其他答案具有相同的效果,但要简单得多:
RedirectMatch 404 /\.git
这可以进入.htaccess
或进入您的服务器配置文件。它通过返回 404 来隐藏名称以 开头的任何文件或目录.git
(例如.git
目录或.gitignore
文件)。因此,不仅隐藏了您的 Git 存储库的内容,还隐藏了它的存在。
答案2
它不起作用,因为规则中用的是“svn”而不是“git”。您所要做的就是将“svn”替换为“git”。
<Directorymatch "^/.*/\.git/">
Order 'deny,allow'
Deny from all
</Directorymatch>
答案3
如果你使用的是共享主机服务,但无法访问Apache 配置文件,您仍然可以在 .htaccess 文件中执行此操作,如下所示:
RewriteEngine On
RewriteRule "^(.*/)?\.git/" - [F,L]
答案4
### never deliver .git folders, .gitIgnore
RewriteRule ^(.*/)?\.git+ - [R=404,L]
# 2nd line of defense (if no mod_rewrite)
RedirectMatch 404 ^(.*/)?\.git+
这在 中有效.htaccess
,无需http.conf
访问权限。将此作为重写规则中的第一个。Rewrite On
如果需要,请添加在前面。
从安全角度来看,我更喜欢伪造的 404 而不是 403,因为这样对攻击者来说更有用。请注释掉其中一个,以确保另一个也对您有用。
顺便说一句,好的变化是,对这两者而言,你的试金石是:
http://localhost/.gitignore
http://localhost/.git/HEAD