ScriptAliasMatch 中用户转发背后的机制

ScriptAliasMatch 中用户转发背后的机制

我正在关注本教程用于设置 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-exehttps://stackoverflow.com/questions/8021167/git-debian-apache-and-smart-http也就是添加

SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER

添加到我的 apache 配置中,并$REMOTE_USER在我的脚本中使用,该脚本确实包含经过身份验证的用户名。我真的很想知道教程中的示例应该如何工作。

相关内容