我有一个使用github(封闭源)的网站来跟踪更改和更新站点。唯一的问题是,似乎可以通过Web访问.git目录。如何停止此操作,仍然可以使用git?
我应该使用.htaccess吗?我应该更改.git的权限吗?
我有一个使用github(封闭源)的网站来跟踪更改和更新站点。唯一的问题是,似乎可以通过Web访问.git目录。如何停止此操作,仍然可以使用git?
我应该使用.htaccess吗?我应该更改.git的权限吗?
Answers:
.htaccess
在.git
文件夹中创建一个文件,并将以下内容放入此文件中:
Order allow,deny
Deny from all
但是请注意,如果您重新克隆存储库,它将丢失
.git/
目录本身中,因为如果您重新克隆存储库,它将丢失。
将其放在Web服务器根目录下的.htaccess
文件中:
RedirectMatch 404 /\.git
该解决方案既强大又安全:它
.git
于您网站中的所有目录,即使目录不止一个,.gitignore
和.gitmodules
.git
目录,并且.git
文件夹上工作,但是我仍然可以.gitignore
拉出文件。
server config, virtual host, directory, .htaccess
RedirectMatch 404 /\.git.*
文件夹.htaccess
上的和权限都.git/
可以使用。我推荐前者:
<Directory .git>
order allow,deny
deny from all
</Directory>
<Files>
,<FilesMatch>
)。
我不想在.git
目录中乱搞,也无法使Bennett的解决方案在Apache 2.2上运行,但是在我的<VirtualHost>
配置中添加了以下内容:
RewriteRule ^.*\.git.* - [R=404]
我不习惯单独控制对.git文件夹的访问,并选择通过apache config而不是.htaccess来进行访问,以防止覆盖它们或忘记新安装等。
以下是一些详细说明,希望对您有所帮助。我正在使用Ubuntu 16.10。
一个更健壮和简单的选项将是禁用目录的“读取”和“执行”权限.git
。
例如,由于大多数Apache(httpd)在一个特殊的用户帐户下运行,因此它apache
在CentOS上以用户身份运行,而.git
目录必须在真实的用户帐户下创建,因此我们可以简单地通过更改权限来阻止访问。而且,这种方法不会引入任何新文件,也不会影响git命令。
该命令可以是:
chmod -R o-rx .git
chmod
再次运行。
mod_rewrite将给您所需的效果:
RewriteEngine on
RewriteRule .*\.git/.* - [F]
.git
目录的存在,因为它返回禁止代码而不是未找到。
.htaccess
为什么不简单地将.git/
目录放在webroot上方,而不是像大多数答案所建议的那样弄乱规则?
在我的设置中,.git
目录通常位于以下位置:
/home/web/project_name/.git/
我的实际代码位于
/home/web/project_name/www_root/
因为我的网站根(在Apache或Nginx的定义。我更喜欢后者)是/home/web/project_name/www_root/
没有办法的.git
目录可以通过Web访问,因为它生活“高于”的根目录
project_name
目录有两个子目录:www_root
访问者浏览我的网站时实际在其中提供文件的位置以及存储库.git
所在的位置。从存储库中提取更新www_root
及其内容。事实是,由于该.git
目录位于我的前端控制器的上方,因此无法通过Web访问。