使用ScriptAliasMatch时会忽略.htaccess

时间:2012-11-17 15:34:44

标签: git apache .htaccess apache-config

我想通过http / https准备几个GIT存储库。我在这里和那里阅读并了解了git-http-backend,我按照教程并设法使一切工作。我可以克隆提供我的htpasswd文件中指定的crentials的存储库(现在让我们假设user1和user2)并推回更改。

我的回购在 / var / www / git ,gitweb也是如此。

etc / httpd / conf.d / git.conf

SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL

ScriptAliasMatch \
    "(?x)^/git/(.*/(HEAD | \
                    info/refs | \
                    objects/(info/[^/]+ | \
                             [0-9a-f]{2}/[0-9a-f]{38} | \
                             pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
                    git-(upload|receive)-pack))$" \
    /usr/libexec/git-core/git-http-backend/$1

ScriptAlias /git /var/www/git/gitweb.cgi

<Location /git>
    AuthType Basic
    AuthName "Basic Auth"
    AuthBasicProvider file ldap

    # LDAP
    AuthzLdapAuthoritative Off
    AuthLDAPURL "ldap://[...]/CN=Users,DC=ad,DC=example,DC=com?sAMAccountName"
    AuthLDAPBindDN "CN=Administrator,CN=Users,DC=ad,DC=example,DC=com"
    AuthLDAPBindPassword Password11

    # FILE 
    AuthUserFile /var/www/htpasswd
    AuthGroupFile /var/www/git.groups
    Require valid-user
</Location>

我用

克隆存储库
git clone http://localhost/git/gitrepo
Username for 'http://localhost/git/gitrepo': user1
Password for 'http://user1@localhost': XXXXX

问题是我正在尝试设置基于存储库的授权,我只希望一组用户能够访问每个存储库。我想出使用.htaccess文件将是完美的解决方案(无需重启服务器),所以我在我的存储库目录/ var / www / git / gitrepo中放了一个简单的.htaccess:

Require User test2

理论上,应该禁止使用test1进行克隆/推送更改,但它仍然有效。事实证明.htaccess被忽略了,因为无论我放在那里,我都可以克隆存储库,如果我已经过身份验证。

我认为 ScriptAliasMatch 可能存在问题,也许所有处理都转到git-http-backend exec并且它不会回到Apache,因为它重定向了所有流量?我是Apache的新手,所以它可能是一个简单的故事,但请 - 帮助! :)

更新1 :是的,在/ var / www / git的主配置中,AllowOverride设置为“全部”:

<Directory "/var/www/git">
    AllowOverride All
</Directory>

1 个答案:

答案 0 :(得分:0)

您的/ var / www / git目录位于普通Web文档树之外。 这是一件好事,但这意味着只有git-http-backend会 实际上访问此目录,而不是Web服务器,如任何.htaccess 文件无法读取。

您需要在服务器配置区域进行身份验证,所以它 验证URL,或者作为git-http-backend程序所在的包装器。

可以在一台服务器上安装多个GIT存储库,但很少有文档详细说明如何执行此操作。