【发布时间】:2016-08-29 16:11:57
【问题描述】:
到目前为止,我的 gitweb 安装工作正常,但所有生成的链接都包含查询字符串,例如
host/gitweb?p=somepath&a=summary
格式不正确。 首先,与号被分号代替。检查 html 时,链接看起来像
host/gitweb?p=somepath;a=summary
点击链接时,浏览器会转义“;”到 '%3b',所以发送到服务器的 url 看起来像
host/gitweb?p=somepath%3ba=summary
gitweb.cgi 不解析这个并显示 404 错误页面。当我用 ';' 替换 '%3b'或“&”,一切正常。
如何在服务器端解决这个问题?
到目前为止,我试图找到产生';'的行在网址中,即第 1457 行
$href .= "?" . join(';', @result) if scalar @result;
替换';' by '&' 在浏览器中给了我一个格式错误的 xhtml。用'&'替换它再次强制浏览器转义';'这会再次产生损坏的网址。
如果我设置选项,问题有点隐藏(我可以查看存储库)
$feature{'pathinfo'}{'default'} = [1];
在 gitweb.conf 文件中,但不幸的是,无法显示包含多个存储库的文件夹,因为相应的链接使用了一些查询参数。
【问题讨论】:
-
Re "浏览器转义';'到 '%3b'",没办法。那是不合法的。
-
Re "替换';' by '&' 在浏览器中给了我一个格式错误的 xhtml。",您遇到了 XHTML 注入错误。您忘记转义嵌入在 XHTML 中的文本(URL)。
&需要替换为& -
替换';'通过'&'也不起作用,因为';'当我点击链接时被转义。
-
有没有办法告诉 perl 用 ';' 替换 %3b在解析查询字符串之前?
-
再说一次,这不是真的。如果您将
;替换为&,然后在将其放入XHTML 时将其编码为&,则链接中没有;。