在向我们的网站perl脚本提交表单时,我遇到了mod_rewrite的问题。如果某人在带有http://www.example.com/us/florida/page-title
等网址的网页上发出GET请求,我会使用以下正确运行的重写规则重写该规则:
RewriteRule ^us/(.*)/(.*)$ /cgi-bin/script.pl?action=Display&state=$1&page=$2 [NC,L,QSA]
现在,如果该页面上有一个表单,我想对同一个URL进行表单发布,并让Mod Rewrite使用相同的重写规则来调用相同的脚本并调用相同的操作。但是,正在发生的是重写规则被触发,正在调用正确的脚本并且正在发布所有表单POST变量,但是,重写的参数(此示例中的操作,状态和页面)未被传递给Perl脚本。我正在为GET和POST请求使用相同的Perl代码访问这些变量:
use CGI;
$query = new CGI;
$action = $query->param('action');
$state = $query->param('state');
$page = $query->param('page');
我包含了QSA标志,因为我认为这可能会解决问题,但事实并非如此。如果我直接对脚本URL进行POST,那么一切正常。我很感激任何帮助,找出为什么目前没有这个工作。提前谢谢!
答案 0 :(得分:6)
如果您正在进行POST查询,则需要使用$query->url_param('action')
等从查询字符串中获取参数。您不需要或受益于QSA修饰符。
答案 1 :(得分:3)
将您的脚本更改为:
use CGI;
use Data::Dumper;
my $query = CGI->new; # even though I'd rather call the object $cgi
print $query->header('text/plain'), Dumper($query);
并查看传递给您脚本的内容并使用该信息更新您的问题。