使.git 目录网站无法访问

我有一个网站,我使用 github (封闭源码)跟踪变化和更新网站。唯一的问题是。Git 目录可以通过 web 访问。我怎样才能在停止这个操作的同时仍然能够使用 git 呢?

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

65089 次浏览

.htaccess和对 .git/文件夹的权限都可以使用。我建议使用前者:

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

.git文件夹中创建一个 .htaccess文件,并在该文件中放入以下内容:

Order allow,deny
Deny from all

但是请注意,如果您重新克隆了存储库,那么它就会丢失

Mod _ rewrite 会给你想要的效果:

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

把它放在一个 .htaccess文件在你的网络服务器的 :

RedirectMatch 404 /\.git

这个解决方案是 强壮安全: it

  • 适用于站点中的所有 .git目录,即使有多个目录,
  • 还隐藏其他 Git 文件,如 .gitignore.gitmodules
  • 甚至对于新添加的 .git目录也可以使用,并且
  • 甚至不能说明目录的存在。

我不想在 .git目录中浪费时间,因此无法让 Bennett 的解决方案在 Apache 2.2上工作,但是在我的 <VirtualHost>配置中添加以下内容是可行的:

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

一个更健壮、更简单的选项是禁用 .git目录的 READ 和 Execution 权限。

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

命令可以是:

chmod -R o-rx .git

我不喜欢控制访问我的。每个 git 文件夹并选择通过 apache config 而不是。防止我覆盖它们,或者忘记新安装等等。

下面是一些详细的说明,希望能对你有所帮助。我使用的是 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 start
  6. 如果您再次导航到该文件夹,现在应该会得到一个404
  7. 我试过这个. gitignore,也得到了一个404

为什么不干脆把 .git/目录放在 webroot 之上呢?

在我的设置中,我的 .git目录通常位于这样的地方:

/home/web/project_name/.git/

我真正的代码存在于

/home/web/project_name/www_root/

因为我的网络根(定义在 Apache 或 Nginx。.我更喜欢后者)是 /home/web/project_name/www_root/有没有办法的 .git目录可以从网络访问,因为它生活“高于”比 webroot

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

  1. (开发环境)

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

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

在虚拟主机文件内部(/etc/apache2/sites- 启用/) > 查找虚拟主机文件 > 打开文件 > 关闭虚拟主机标记后粘贴

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

不需要重新启动服务器,它在调用页面时运行