我正在关注本教程用于设置 gitolite在某些时候,使用以下 ScriptAliasMatch:
ScriptAliasMatch \
"(?x)^/(.*/(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))$" \
/var/www/bin/gitolite-suexec-wrapper.sh/$1
目标脚本以
USER=$1
所以我猜想这是为了将用户名从 apache 转发到 suexec 脚本(确实需要它)。但我看不出这是如何做到的。ScriptAliasMatch 文档这让我认为/$1
将被替换为它之前的正则表达式的第一个匹配组。对我来说,它从 (?x)^/ 捕获(。* 到 ))$ 所以这里没有关于用户的任何信息。
我的根本问题是USER
我的脚本中是空的,所以我在 gitolite 中没有获得任何授权。我通过基本身份验证将我的用户名提供给 apache:
<Location />
# Crowd auth
AuthType Basic
AuthName "Git repositories"
...
Require valid-user
</Location>
在之前的 ScriptAliasMatch 下方定义。
所以我真的很想知道这应该如何工作以及我错过了机制的哪一部分,以便我无法在脚本中检索用户。
答案1
我找到了以下解决方案https://stackoverflow.com/questions/3817478/setting-up-git-server-on-windows-with-git-http-backend-exe和https://stackoverflow.com/questions/8021167/git-debian-apache-and-smart-http也就是添加
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER
添加到我的 apache 配置中,并$REMOTE_USER
在我的脚本中使用,该脚本确实包含经过身份验证的用户名。我真的很想知道教程中的示例应该如何工作。