所以我只是在共享主机上安装了 cgit。我自定义编译它并使用符号链接 from $HOME/mydomain-and-public-www-folder.tld/g
to$HOME/local/lib/cgit/prod
链接$HOME/local/lib/cgit/${git describe}
到我更新的构建中的构建以测试最新版本。这包括什么?
[sharedhost]$ pwd
$HOME/local/lib/cgit/prod
[sharedhost]$ ls
.htaccess cgit.cgi cgit.css cgit.png lib/
https://mydomain.tld/g/
现在,当我进入浏览器并看到漂亮的 cgit 界面时,登陆页面上看起来一切都很好。当我单击任何链接时,我得到了正确的存储库,但所有格式都消失了(CSS、PNG 和 JS 文件再见,所有链接都采用https://mydomain.tld/g/cgit.cgi/randomrepo.git
所有 URL 的形式。当然所有文件在 prod 路径中不起作用,因为浏览器会寻找类似的东西https://mydomain.tld/g/cgit.cgi/cgit.css
而不是需要的https://mydomain.tld/g/cgit.css
. 现在,这是我的基本 .htaccess 文件以使其正常工作。
[sharedhost]$ more .htaccess
# GIT BEGIN ###########################################################
Options +Indexes +FollowSymLinks +ExecCGI
Action fastcgi-script cgit.cgi
SetEnv HTTP_CGIT_CONFIG /home/username/local/lib/cgit/cgit-conf/cgitrc
RewriteEngine On
DirectoryIndex cgit.cgi
# GIT END ############################################################
# AUTHENTICATION BEGIN ###############################################
AuthType Digest
AuthName "cgitdigestdomain"
AuthDigestDomain /cgitdigestdomain/
AuthUserFile /home/username/local/lib/cgit/cgit-conf/.htpasswd
Require valid-user
# AUTHENTICATION END ################################################
我已经尝试了一大堆推荐的重写模式,例如 [1] 或 [2]。我对更高级的 .htaccess 规则相对较新,所以有人可以指出如何cgit.cgi
使用 mod-rewrite 从 URL中删除并确保同一目录中的 css 和 png 文件可访问并且QSA/查询字符串得到正确处理。对不起,很长的帖子。我认为更多的细节会说明为什么明显的操作方法对我不起作用。
[1]使用 .htaccess 从 URL 中删除 'index.php'
更新:
两个答案似乎都不错,但我认为我不了解虚拟根和扫描路径功能,但似乎这些答案比以前更进一步,但关键部分仍然缺失。任何指向 repo 的 url(在一个很远的路径中$HOME/data/scm/priv
)都没有正确重定向,我得到一个 404。
[Fri Jul 13 01:16:18 2012] [error] [client 127.0.0.1] File does not exist: $HOME/mydomain-and-public-www-folder.tld/missing.html, referer: https://domain.tld/g/
[Fri Jul 13 01:24:20 2012] [error] [client 127.0.0.1] File does not exist: $HOME/mydomain-and-public-www-folder.tld/failed_auth.html, referer: https://domain.tld/g/
[Fri Jul 13 01:24:21 2012] [error] [client 127.0.0.1] File does not exist: $HOME/mydomain-and-public-www-folder.tld/g/bicon.git, referer: https://domain.tld/g/
[Fri Jul 13 01:24:21 2012] [error] [client 127.0.0.1] File does not exist: $HOME/mydomain-and-public-www-folder.tld/missing.html, referer: https://domain.tld/g/
[Fri Jul 13 01:26:11 2012] [error] [client 127.0.0.1] File does not exist: $HOME/mydomain-and-public-www-folder.tld/g/admin-scripts.git, referer: https://domain.tld/g/
[Fri Jul 13 01:26:11 2012] [error] [client 127.0.0.1] File does not exist: $HOME/mydomain-and-public-www-folder.tld/missing.html, referer: https://domain.tld/g/
更改名称/IP 以保护无辜者,但您明白了。所以看起来回购请求不会回到cgit CGI,那么他们去哪里了?我正在努力获得更好的重定向日志。我们会看到的。
更新 2:
当然,RewriteLog
这是一个你不能输入的指令,.htaccess
因为我忘记了,愚蠢的我。不确定现在在共享主机上该怎么做。多么令人讨厌。这是促使我研究 VPS 托管并咬紧牙关并仅将这个共享主机用于非常愚蠢的东西的几个问题之一。
PS:我确实将原始问题按原样通过电子邮件发送到 cgit dev 列表,但也从未收到任何回复。所以他们不在乎,觉得这是一个愚蠢的问题,不确定。哈哈。