我需要对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是否首先找到了参数?
任何帮助(或额外的引导问题)将是最感激的。这个网站是为一个青年筹款人准备的,所以现在没有太多的时间来重写它。
根据此http://marc.info/?l=mason&m=96320172801620&w=3)和我的经验,它应该在$ENV{QUERY_STRING}中可用。
也许你的设置累了使用它从Apache::请求直接或CGI服务器没有设置这个自动?
从http://cpansearch.perl.org/src/jswartz/html1.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} = "";
}
感谢调试帮助。根据您的想法,我确定mason无法使用$ENV{QUERY_STRING},这使我回过头来检查apache。果然,有一个重写规则没有[QSA],所以它正在吃掉查询字符串。