4

我需要对 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 和 CGI​​Handler 之间的参数传递是否存在差异?如果它们在其他地方被吃掉,我如何测试 CGIHandler 是否首先找到了参数?

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

4

2 回答 2

2

基于此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 请求对象供组件内部使用,类似于 HTML::Mason::ApacheHandler 下的 Apache 请求对象,但功能有限。

基于此: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} = "";
}
于 2014-06-02T08:45:39.270 回答
0

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

于 2014-06-02T15:07:29.237 回答