Estou tentando ter o GitList (visualizador da Web do PHP para git) e o GIT Smart HTTP (S) no mesmo domínio git.domain. ext. A seguir está a configuração real:
- URLs HTTP inteligentes do GIT são o formulário git.domain.ext / git / reponame.git
- GitList é veiculado por meio de git.domain.ext / gitlist
Até agora, tudo bem. Tudo funciona.
O que eu gostaria de alcançar é o seguinte:
- Qualquer solicitação do formulário git.domain.ext / *. git deve ir para git.domain.ext / git / *. git
- Qualquer outra solicitação deve ser padronizada para git.domain.ext / gitlist
O seguinte é a minha configuração do Apache:
<VirtualHost *:443>
ServerName git.domain.ext
DocumentRoot /home/user/www/git.domain.ext
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER
SetEnv GIT_PROJECT_ROOT /home/user/git/
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
<Location />
AuthName "Git Authentication"
AuthType Basic
Require valid-user
AuthUserFile /home/user/git/.htpasswd
</Location>
<LocationMatch "^/git/.*/git-receive-pack$">
AuthType Basic
AuthName "Git Access"
Require valid-user
AuthUserFile /home/user/git/.htpasswd
</LocationMatch>
[..]
</VirtualHost>
O seguinte é o .htaccess em /home/user/www/git.domain.ext
AuthName "Git Authentication"
AuthType Basic
Require valid-user
AuthUserFile /home/user/git/.htpasswd
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_URI} ^(.*)\.git
RewriteRule ^(.*)\.git /git/$1.git [R=301,L]
RewriteRule ^(.*) /gitlist/ [R=301,L]
</IfModule>
Git operações com o trabalho original /git/*.git:
git clone https://[email protected]/git/test.git
Cloning into 'test'...
Password for 'https://[email protected]':
remote: Counting objects: 343, done.
remote: Compressing objects: 100% (322/322), done.
remote: Total 343 (delta 110), reused 149 (delta 12)
Receiving objects: 100% (343/343), 1.13 MiB | 1.36 MiB/s, done.
Resolving deltas: 100% (110/110), done.
Infelizmente, as operações do git com o /* / git desejado não funcionam:
git clone https://git.domain.ext/test.git
Cloning into 'test'...
Password for 'https://[email protected]':
fatal: https://[email protected]/test.git/info/refs?service=git-upload-pack not found: did you run git update-server-info on the server?
No entanto, parece que o redirecionamento funciona:
curl --user user:pass https://git.domain.ext/test.git
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="https://git.domain.ext/git/test.git">here</a>.</p>
[..]
Obrigado pela sua ajuda.