![在同一 URL 下拥有静态 Web 内容和 Mercurial 服务器](https://linux22.com/image/563852/%E5%9C%A8%E5%90%8C%E4%B8%80%20URL%20%E4%B8%8B%E6%8B%A5%E6%9C%89%E9%9D%99%E6%80%81%20Web%20%E5%86%85%E5%AE%B9%E5%92%8C%20Mercurial%20%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
我正在寻找一种方法来使用 Apache 2 网络服务器显示静态 HTML 内容,同时在同一 URL 下拥有 Mercurial 存储库。例如,http://www.myserver.org/projectname
如果使用普通网络浏览器浏览,则应该可以看到项目 HTML,但应该可以使用 克隆项目的 Mercurial 存储库hg clone http://www.myserver.org/projectname
。基本上就是这样http://bitbucket.org有。我思考可以通过配置 Apache 以hgweb.cgi
仅将脚本用于 Mercurial 请求而不用于普通 HTML GET 请求来实现这一点。但是,我不知道 Mercurial 使用哪些请求(希望不是 GET),以及如何相应地配置 Apache。
再补充一点背景知识:
需要为多个存储库/项目(目前约 2400 个)提供此功能。到目前为止,我已hgweb
按照说明进行了尝试发布存储库这对于存储库的 Web 视图来说很好,但不允许我显示除作者、名称和描述(来自.hg/hgrc
[web]
部分)之外的任何其他信息。变量替换hgweb
非常有限,因此不允许提供任意变量。我知道我可以简单地拥有静态 HTML 页面和hgweb
不同的 URL,但这不符合给我的限制。
答案1
要了解 mercurial 发送了什么样的请求——我们有完美的 tcpdump。
我启动 tcpdump,执行 hg clonehttp://selenic.com/hg
并看到 hg 执行 GET 请求 /hg?cmd=capabilities , /hg?cmd=getbundle , /hg?cmd=batch
我认为,您可以收集 hg 所需的所有请求,并配置 apache(或 nginx 或其他代理)将这些请求转发到 hgweb.cgi