Answers:
它不起作用,因为规则中包含“ svn”而不是“ git”。您要做的就是用“ git”替换“ svn”。
<Directorymatch "^/.*/\.git/">
Order deny,allow
Deny from all
</Directorymatch>
<DirectoryMatch /\.git/>
这与许多其他答案具有相同的效果,但更为简单:
RedirectMatch 404 /\.git
这可以进入.htaccess
您的服务器配置文件。它通过返回404来隐藏名称以开头的任何文件或目录.git
(例如,.git
目录或.gitignore
文件)。因此,不仅Git存储库的内容被隐藏,它的存在也被隐藏了。
.git
文件夹仍将可见,但是当您尝试访问它们时会得到404。
如果您不使用.htaccess文件,而是想使用/etc/apache2/httpd.conf(或服务器的主conf文件)来隐藏.git目录和.gitignore文件,则可以使用以下命令。我发现上面关于主配置设置的答案没有隐藏gitignore文件。
# do not allow .git version control files to be issued
<Directorymatch "^/.*/\.git+/">
Order deny,allow
Deny from all
</Directorymatch>
<Files ~ "^\.git">
Order allow,deny
Deny from all
</Files>
www.example.com/.git/config
在Apache httpd 2.4.27中阻止该文件。
### 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
RewriteEngine On
RewriteRule之前。但是无论如何它都是重言式的和多余的,因为更简单的RedirectMatch本身就足够了。尽管甚至可以简化。基本上,我推荐我的答案。:)
要使用.htaccess保护.git目录以及其他文件,例如.gitignore和.gitmodules,请使用:
RewriteEngine On
RewriteRule ^(.*/)?\.git+ - [F,L]
ErrorDocument 403 "Access Forbidden"
对于那些只想拒绝Linux发行版中所有“隐藏”文件和目录(通常所有文件以“。”开头)的人来说,以下是将Apache 2.4放置在服务器conf上下文中的方法:
<FilesMatch "^\.(.*)$">
Require all denied
</FilesMatch>
<DirectoryMatch "/\.(.*)">
Require all denied
</DirectoryMatch>
这是旧的Apache 2.2样式(相同的regex,只是不同的auth指令):
<FilesMatch "^\.(.*)$">
Order deny,allow
Deny from all
</FilesMatch>
<DirectoryMatch "/\.(.*)">
Order deny,allow
Deny from all
</DirectoryMatch>
然后,您不必担心.git
或.svn
专门担心。那也将匹配类似的.htaccess
和.htpasswd
固有的东西。
就个人而言,我喜欢为此类请求发出403,而不是404,但是您可以轻松地使用RewriteRule而不是auth denial,如下所示:
<FilesMatch "^\.(.*)$">
RewriteRule "^(.*)$" - [R=404,L]
</FilesMatch>
<DirectoryMatch "/\.(.*)">
RewriteRule "^(.*)$" - [R=404,L]
</DirectoryMatch>
您可能还想拒绝服务.gitignore
。
以点开头的文件在Linux中隐藏。
因此,只需404以点开头的任何内容:
RedirectMatch 404 /\.
这有点晚了,但是我的回答略有不同,所以我想我将添加它。这必须放在httpd.conf文件中。该<Files "*">
嵌套的内部<Directory>
标签将阻止目录中的所有文件。
# GitHub Directory
<Directory /var/www/html/yoursite/.git>
Order Deny,Allow
Deny from all
<Files "*">
Order Deny,Allow
Deny from all
</Files>
</Directory>
# GitHub files
<Files .gitignore>
order Deny,Allow
Deny from all
</Files>