【问题标题】:How to get QUERY_STRING in perl mason CGIHandler?如何在 perl mason CGIHandler 中获取 QUERY_STRING?
【发布时间】:2014-07-22 03:59:46
【问题描述】:

我需要对 Mason 网站进行一些维护,该网站在一家托管公司运行良好,但需要转移到另一家托管公司。新的托管公司不支持ApacheHandler,所以我把代码改成CGIHandler。

不幸的是,我不再将 QUERY_STRING 元素填充到 mason 环境中,这有点困难!

我从这里获得了大部分处理程序代码:http://joe.pepersack.net/code/site-mason_handler.pl

处理程序的设置如下:

$h = HTML::Mason::CGIHandler->new(
  comp_root     => $mason_root,
  data_dir      => $mason_data,
  allow_globals => $::MASON_GLOBALS,
  error_mode    => "output",
  default_escape_flags => "h"
);

互联网上的一般搜索并没有给我带来任何好处......

有谁知道ApacheHandler和CGIHandler之间的参数传递是否有区别?如果它们在其他地方被吃掉,我如何测试 CGIHandler 是否首先找到了参数?

任何帮助(或其他引导性问题)将不胜感激。这个网站是为一个青年筹款活动准备的,所以目前没有太多时间/支持来重写它。

【问题讨论】:

  • 它是 $ENV{QUERY_STRING} 吗?

标签: perl cgi dreamhost mason


【解决方案1】:

根据http://marc.info/?l=mason&m=96320172801620&w=3) 和我的经验,它应该在 $ENV{QUERY_STRING} 中可用。

也许您的设置厌倦了直接从 Apache::Request 使用它,或者 CGI 服务器没有自动设置它?

来自http://cpansearch.perl.org/src/JSWARTZ/HTML-Mason-1.46/htdocs/CGIHandler.html

这个模块还提供了一个 $r 请求对象供内部使用 组件,类似于 Apache 下的请求对象 HTML::Mason::ApacheHandler,但功能有限。

基于此:http://redmine.lighttpd.net/projects/lighttpd/wiki/MasonRecipe/11

### this seems to be necessary as lighttpd does not provide the PATH_INFO and the QUERY_STRING environment variables
## right' way to parse the REQUEST_URI out into PATH_INFO and QUERY_STRING
my $uri = $ENV{REQUEST_URI};
if ($uri =~ /\?/) {
  $uri =~ /^(.*?)\?(.*)/;
  $ENV{PATH_INFO} = $1;
  $ENV{QUERY_STRING} = $2;
} else {
  $ENV{PATH_INFO} = $uri;
  $ENV{QUERY_STRING} = "";
}

【讨论】:

    【解决方案2】:

    感谢调试帮助。根据您的想法,我确定 $ENV{QUERY_STRING} 对 mason 不可用,这让我回去检查 apache。果然有一个重写规则没有[QSA],所以它正在吃查询字符串。

    【讨论】:

      猜你喜欢
      • 2016-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多