【问题标题】:.htaccess is ignored when using ScriptAliasMatch使用 ScriptAliasMatch 时忽略 .htaccess
【发布时间】:2012-11-17 15:34:43
【问题描述】:

我想准备一些可通过 http/https 获得的 GIT 存储库。我在这里和那里阅读并了解了git-http-backend,我按照教程并设法让一切正常工作。我可以克隆提供在我的 htpasswd 文件中指定的凭据的存储库(我们现在假设 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:是的,AllowOverride 在 /var/www/git 的主配置中设置为“All”:

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

【问题讨论】:

  • 我想知道这里是否有什么可以做的(我想我会加入邮件列表),但我只想说我切换到 Gitolite,它就像魅力一样 :)

标签: git apache .htaccess apache-config


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2015-02-05
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 2023-03-14
    • 2012-01-16
    • 1970-01-01
    相关资源
    最近更新 更多