Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl Gitweb URL在查询字符串中转义_Perl_Url_Cgi_Gitweb - Fatal编程技术网

Perl Gitweb URL在查询字符串中转义

Perl Gitweb URL在查询字符串中转义,perl,url,cgi,gitweb,Perl,Url,Cgi,Gitweb,到目前为止,我的gitweb安装工作正常,但所有生成的链接都包含查询字符串,例如 host/gitweb?p=somepath&a=summary 不知怎么的,它们是畸形的。 首先,用分号替换符号AND。检查html时,链接看起来像 host/gitweb?p=somepath;a=summary host/gitweb?p=somepath%3ba=summary 当klick链接时,浏览器将跳出“;”发送到“%3b”,因此发送到服务器的url如下所示 host/gitweb?p

到目前为止,我的gitweb安装工作正常,但所有生成的链接都包含查询字符串,例如

host/gitweb?p=somepath&a=summary
不知怎么的,它们是畸形的。 首先,用分号替换符号AND。检查html时,链接看起来像

host/gitweb?p=somepath;a=summary
host/gitweb?p=somepath%3ba=summary
当klick链接时,浏览器将跳出“;”发送到“%3b”,因此发送到服务器的url如下所示

host/gitweb?p=somepath;a=summary
host/gitweb?p=somepath%3ba=summary
gitweb.cgi不会对此进行解析,并显示404错误页面。当我将“%3b”替换为“;”时或者一个“&”,一切都很好

如何在服务器端修复此问题

到目前为止,我试图找到生产“;”的生产线在URL中,即第1457行

$href .= "?" . join(';', @result) if scalar @result;
替换“;”by'&'在浏览器中给了我一个格式不正确的xhtml。将其替换为“&;”再次强制浏览器转义“;”这会再次产生断开的URL

如果我设置了这个选项,这个问题有点隐藏(我可以查看存储库)

$feature{'pathinfo'}{'default'} = [1];

在gitweb.conf文件中,但不幸的是,无法显示包含多个存储库的文件夹,因为相应的链接使用了一些查询参数。

您没有将查询字符串编码或解码为孔。 参数名称和值必须单独编码和解码,并使用查询字符串的分隔符,即

= ; &
永远不要对URL进行编码或解码


您可以检查服务器环境变量
$ENV{REQUEST\u URI}
,查看服务器是否收到了如您所说的编码信息。如果浏览器正在发送它,那么这就是问题所在,您在Perl代码中无法解决这个问题。因为它只会在Perl代码中引起更多问题。

您不会将查询字符串编码或解码为一个洞。 参数名称和值必须单独编码和解码,并使用查询字符串的分隔符,即

= ; &
永远不要对URL进行编码或解码


您可以检查服务器环境变量
$ENV{REQUEST\u URI}
,查看服务器是否收到了如您所说的编码信息。如果浏览器正在发送它,那么这就是问题所在,您在Perl代码中无法解决这个问题。因为它只会在Perl代码中引起更多问题。

我在apache中使用重写规则解决了这个问题:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^a=project_list%3bpf=(.*)$
RewriteRule (.*) $1?a=project_list;pf=%1 [QSA]
它仅适用于启用了pathinfo功能且具有指定路径的项目列表。一个整体的方法是搜索所有可能的查询参数并将其全部替换


但是,这个解决方案并不令人满意,因为它并没有解决gitweb奇怪的url转义的实际问题。

我在apache中使用重写规则解决了这个问题:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^a=project_list%3bpf=(.*)$
RewriteRule (.*) $1?a=project_list;pf=%1 [QSA]
它仅适用于启用了pathinfo功能且具有指定路径的项目列表。一个整体的方法是搜索所有可能的查询参数并将其全部替换


然而,这个解决方案并不令人满意,因为它并没有解决gitweb奇怪的url转义的实际问题。

Re“浏览器无法将“;”转义到“%3b”。这是不合法的。如果“用“&”替换“;”会在浏览器中给我一个格式不正确的xhtml”,则会出现xhtml注入错误。您忘记转义嵌入到XHTML中的文本(URL)<代码>&需要替换为
&替换“;”以“&;为单位”也不起作用,因为“;”当我单击链接时正在转义。是否有方法告诉perl用“;”替换%3b在解析查询字符串之前?同样,这不是真的。如果您替换了
编码,然后将其编码为
&当您将其放入XHTML时,没有
&
需要替换为
&替换“;”以“&;为单位”也不起作用,因为“;”当我单击链接时正在转义。是否有方法告诉perl用“;”替换%3b在解析查询字符串之前?同样,这不是真的。如果您替换了
编码,然后将其编码为
&当您将其放入XHTML时,没有
在链接中。我将命令'die$ENV{'REQUEST_URI'}'添加到我的gitweb.conf,这在apache错误日志中得到了以下行:'[Tue Aug 30 18:37:08.416866 2016][cgi:error][pid 32381][client 141.30.155.71:54651]AH01215:[Tue Aug 30 18:37:08 2016]gitweb.cgi:FATAL:[Tue Aug 30 18:37:08 2016]gitweb.cgi:FATAL:/gitweb/gitweb.cgi?a=project_list%3bpf=projects/foo at/home/git/gitweb.conf第61行。“--因此,浏览器似乎会发送位置栏中打印的请求。也许我可以通过Apache重写请求,以便将“%3b”替换为“;”。。。我将命令'die$ENV{'REQUEST_URI'}'添加到我的gitweb.conf中,这在apache错误日志中得到了以下行:'[Tue Aug 30 18:37:08.416866 2016][cgi:error][pid 32381][client 141.30.155.71:54651]AH01215:[Tue Aug 30 18:37:08 2016]gitweb.cgi:FATAL:[Tue Aug 30 18:37:08 2016]gitweb.cgi:FATAL:/gitweb/gitweb.cgi?a=project_list%3bpf=projects/foo at/home/git/gitweb.conf第61行。“--因此,浏览器似乎会发送位置栏中打印的请求。也许我可以通过Apache重写请求,以便将“%3b”替换为“;”。。。值得一提的是,我也遇到了同样的问题,并通过将NE标志添加到Apache配置中现有的RewriteRule指令中来修复它。另请参阅它的价值所在,我也有同样的问题,并通过在Apache配置中向现有的RewriteRule指令添加NE标志来修复它。另见