使.git目录web无法访问

时间:2011-05-26 17:13:52

标签: git .htaccess apache2

我有一个网站,我使用github(封闭源代码)来跟踪更改并更新网站。唯一的问题是,看起来.git目录可以通过网络访问。我怎么能阻止它并仍能使用git?

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

9 个答案:

答案 0 :(得分:337)

将其放在网络服务器 root .htaccess文件中:

RedirectMatch 404 /\.git

此解决方案强大安全:它

  • 适用于您网站中的所有.git目录,即使有多个
  • 还会隐藏其他Git文件,例如.gitignore.gitmodules
  • 甚至适用于新添加的.git目录和
  • 甚至没有泄露目录存在的事实。

答案 1 :(得分:34)

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

Order allow,deny
Deny from all

答案 2 :(得分:33)

.htaccess文件夹上的.git/和权限都可以使用。我推荐前者:

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

答案 3 :(得分:6)

我不想在.git目录中捣乱并且无法让Bennett's solution在Apache 2.2上工作,但是将以下内容添加到{{1}配置工作:

<VirtualHost>

答案 4 :(得分:5)

我不习惯单独控制对.git文件夹的访问,并选择通过apache config而不是.htaccess来执行此操作,以防止我覆盖它们,或者忘记重新安装等。

以下是一些希望他们帮助的详细说明。我使用的是Ubuntu 16.10。

  1. 首先检查在浏览器中导航到.git文件夹时会发生什么。在我的例子中,我看到了一个目录列表。如果你看到你不应该看到的东西(即你没有得到404),请执行以下操作。
  2. 使用apache2ctl -V获取HTTPD_ROOT和SERVER_CONFIG_FILE
  3. 使用它来编辑你的apache配置,在我的例子中是$ sudo nano /etc/apache2/apache2.conf
  4. 在配置文件中的某处添加以下内容:RedirectMatch 404 /.git
  5. 重启apache:$ sudo service apache2 restart
  6. 如果再次导航到该文件夹​​,现在应该为您提供404
  7. 我尝试使用.gitignore并获得了404

答案 5 :(得分:3)

mod_rewrite将为您提供所需的效果:

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

答案 6 :(得分:2)

A more robust and simple option would be disabling the READ and Execution permission of the .git directory.

Since mostly Apache (httpd) runs under a special user account, for example, it runs as user apache on CentOS, while the .git directory must be created under a real user account, so we can simply block the access by changing the permission. Moreover, this approach doesn't introduce any new file, nor affect the git commands.

The command can be:

chmod -R o-rx .git

答案 7 :(得分:0)

与其像大多数答案所建议的那样混乱.htaccess规则,为什么不简单地将.git/目录放在webroot之上?

在我的设置中,我的.git目录通常位于以下位置:

/home/web/project_name/.git/

我的实际代码存在于

/home/web/project_name/www_root/

因为我的Web根目录(在Apache或Nginx上定义。我更喜欢后者)是/home/web/project_name/www_root/,所以无法从Web上访问.git目录,因为它的存在“比”更高Webroot

答案 8 :(得分:0)

apache2(LAMP)服务器的解决方案-您有2个位置添加.htaccess内容。如果1个失败,请尝试下一个

  1. 用于(开发环境)

在/ var / www / html根目录中创建.htaccess文件,并将代码粘贴到其中

<Directorymatch "^/.*/\.git/">
  Order 'deny,allow'
  Deny from all
</Directorymatch>
  1. 用于(生产环境)

内部虚拟主机文件(/ etc / apache2 / sites-enabled /)>找到您的虚拟主机文件>打开文件>关闭虚拟主机标签后,粘贴

<Directorymatch "^/.*/\.git/">
  Order 'deny,allow'
  Deny from all
</Directorymatch>

无需重启服务器,它会在调用页面时运行