使.git目录的网页无法访问

我有一个网站,我使用github(封闭源)来跟踪更改和更新网站。 唯一的问题是,看起来.git目录可以通过网页访问。 我怎样才能阻止这个,仍然能够使用Git?

我应该使用.htaccess吗? 我应该更改.git的权限吗?

.git文件夹中创build.htaccess文件,并将以下内容放在此文件中:

 Order allow,deny Deny from all 

把它放在你的web服务器根目录下的.htaccess文件中:

 RedirectMatch 404 /\.git 

这个解决scheme是健壮安全的 :它

  • 适用于您网站中的所有.git目录,即使存在多个,
  • 也隐藏其他Git文件,如.gitignore.gitmodules
  • 即使对于新添加的.git目录也是如此
  • 甚至没有放弃目录存在的事实。

.git/文件夹的.htaccess和权限都可以工作。 我build议前者:

 <Directory .git> order allow,deny deny from all </Directory> 

mod_rewrite会给你想要的影响:

 RewriteEngine on RewriteRule .*\.git/.* - [F] 

我不想在.git目录中.git ,也无法使Bennett的解决scheme在Apache 2.2上工作,但在我的<VirtualHost>configuration中添加了以下内容:

 RewriteRule ^.*\.git.* - [R=404] 

更健壮和简单的选项将禁用.git目录的读取和执行权限。

由于大多数Apache(httpd)是以一个特殊用户帐户运行的,例如在CentOS上以apache用户身份运行,而.git目录必须在真实用户帐户下创build,因此我们可以通过更改权限来简单地阻止访问。 而且,这种方法不会引入任何新文件,也不会影响git命令。

该命令可以是:

 chmod -R o-rx .git 

我并不习惯于单独控制对.git文件夹的访问,而是select通过apacheconfiguration来代替.htaccess,以防止覆盖它们,或者忘记进行新的安装等。

这里有一些详细的说明希望他们帮助。 我使用Ubuntu 16.10。

  1. 首先检查浏览器中导航到.git文件夹的情况。 在我的情况下,我被列入目录列表。 如果你看到你不应该看到什么(即你没有得到404),请执行以下操作。
  2. 使用apache2ctl -V来获取HTTPD_ROOT和SERVER_CONFIG_FILE
  3. 使用它来编辑你的apacheconfiguration,在我的情况下$ sudo nano /etc/apache2/apache2.conf
  4. 在configuration文件的某处添加以下内容:RedirectMatch 404 /.git
  5. 重新启动apache:$ sudo service apache2 restart
  6. 现在,如果您再次导航到该文件夹​​,现在应该得到一个404
  7. 我试着用.gitignore,也得到了404