【问题标题】:Strange problem getting $ENV{'QUERY_STRING'}获取 $ENV{'QUERY_STRING'} 的奇怪问题
【发布时间】:2010-12-10 18:41:37
【问题描述】:

我在这里遇到了一个奇怪的问题。我正在将一个(工作)站点移动到一个我无法直接访问的新 apache 服务器(我必须通过两个人才能完成工作)。

该站点使用名为 adframe 的 perl 脚本来解析 html 模板。调用它的 URL 看起来像 /cgi-bin/adframe/index.html?x=something,其中 adframe 是脚本。缺少的后缀从未引起任何实际问题。但是在这个新的 Ubuntu 服务器上,$ENV{'QUERY_STRING'} 总是空的。 $ENV{'REQUEST_METHOD'} 正确显示为 GET,但 query_string 什么也没显示...

常规 *.cgi 脚本显示 query_string 没有问题。

从我收集到的日志中,服务器似乎正在运行 fastcgi、mod_fcgid,并且服务器甚至不接受 .pl 作为脚本的扩展名。我对服务器软件没有太多经验,但我认为这可能是服务器不接受 adframe 作为 cgi 脚本并因此没有正确传递 query_string 的问题......谁能给我一些提示我在哪里可以指向管理员,或者我可以自己在 .htaccess 中做些什么?无论如何要确保adframe 被识别为cgi 脚本!? (如果这就是问题......)

感谢任何帮助! 托马斯

编辑:我发现了更多详细信息:服务器似乎正在运行 VARNISH 缓存...这是与我通常的配置的主要区别... 此外,脚本的工作方式是,如果您调用 /cgi-bin/adframe/somedir/somefile.html?x=something,$ENV{PATH_INFO} 会告诉您要解析哪个模板,而 $ENV{QUERY_STRING} 是请求参数。现在查询字符串是空的,但是如果我调用 /cgi-bin/adframe?x=something(没有任何 PATH_INFO),查询字符串就会出现! 有谁知道这里发生了什么? 谢谢!

【问题讨论】:

  • 它真的被执行了吗? (例如,它是否返回错误,或者像在没有参数的情况下调用它一样正确运行)?另外,如果你向服务器发送一个匹配的 POST 请求会发生什么?
  • 您好,感谢您的提示。是的,它会像没有传递任何参数一样执行,是的,POST 到达脚本(通过 STDIN)...
  • 我也刚刚尝试了 $cgi->param() 来获取查询字符串。没有运气。

标签: perl apache fastcgi httprequest varnish


【解决方案1】:

知道了。 VARNISH 缓存将所有查询字符串从静态内容(*.html 等)中剥离出来……唷

【讨论】:

    【解决方案2】:

    刚刚遇到了同样的问题。我是 perl 脚本的新手。

    我尝试了以下操作:

    @values = split (/&/, $ENV{'QUERY_STRING'});
    

    但是没用

    这行得通:

    @values = split (/&/, "$ENV{'QUERY_STRING'}");
    

    以防万一其他新手遇到同样的问题。

    【讨论】:

      猜你喜欢
      • 2012-02-26
      • 2022-01-18
      • 1970-01-01
      • 2015-02-27
      • 2018-06-26
      • 2011-08-13
      • 2011-08-17
      • 2011-02-02
      • 2021-10-10
      相关资源
      最近更新 更多