我的网站是一个包含多个子存储库的mercurial存储库。我需要确保我拒绝访问服务器上每个.hg目录中的所有文件。
例如,我有http://example.com/.hg/
和http://example.com/subrepo1/.hg/
我已将以下内容添加到.htaccess:
<Files ~ "^\.(hg|ht)">
Order allow,deny
Deny from all
</Files>
这是一个好的开始,因为它拒绝访问以.hg
和.ht
开头的文件,但它不会拒绝访问.hg
目录中的文件,所以如果有人类型,例如http://example.com/.hg/branch
,分支文件将显示在他们的浏览器中。
为了确保这些文件不会显示给用户,我需要做什么?如果有人试图访问我服务器上任何.hg
目录中的文件,我想将403或404发送回浏览器。
此问题也适用于网站为subversion / svn存储库的任何人。
答案 0 :(得分:7)
如果您没有 使用mod_rewrite
,那么您可以这样做:
RedirectMatch 404 /\\.hg(/|$)
(完全披露:来自this question的关于Mercurial的回答,关于为Subversion做同样的事情)。
答案 1 :(得分:0)
您始终可以将.htaccess文件放在这些文件夹中,并拒绝文件夹中的所有访问权限。
我假设您需要一个解决方案,您不必将.htaccess文件放在每个文件夹和子文件夹中?
尝试以下操作(假设您具有对网络服务器的ssh访问权限):
内容:
Order deny, allow
Deny from all
执行以下命令:
find . -type d -name .hg -exec cp ./.htaccess {} \;
然后再次从文档根目录中删除.htaccess文件
答案 2 :(得分:0)
如果您只是将存储库完全保留在DocumentRoot之外,那么这就不那么令人担忧了。你可能正在使用hgweb或hgwebdir,它们不需要文件在DocumentRoot中,所以不要这样做。将它们放在/ home / hg / repos或者其他东西中并配置你的hgwebdir.conf来查看那里。
在DocumentRoot中使用repos的唯一原因是为mercurial启用static-http URL表单,但它非常慢,并且在可能的情况下总是首选hgweb。