【问题标题】:.htaccess redirection not working on Apache/2.2.15.htaccess 重定向在 Apache/2.2.15 上不起作用
【发布时间】:2016-06-23 16:43:00
【问题描述】:

我使用的 Apache 版本是 2.2.15。

我的 .htaccess 如下所示:

RewriteEngine on
RewriteBase /myapp/

RewriteRule  ^service/name/(.+)$   /perlcode/cgi_script.pcgi?NAME=$1  [L]

按照预期的行为,例如,当我点击短 URL 时,

myhost.com/myapp/service/name/delivery

在浏览器中,应该转换成

myhost.com/myapp/perlcode/cgi_script.pcgi?NAME=delivery

但是,我发现这并没有发生,而是该参数只是被附加到短 URL 中,如下所示

myhost.com/myapp/service/name/delivery?NAME=delivery

我尝试了 [L,R=301][L,QSA,NC] 标志,但它们也将浏览器 URL 转换为我不想要的长 URL。我希望 URL 转换像以前在 Apache/2.0.52 中那样在后台静默进行

在 Perl 代码级别(版本 5.14.1),我看到 $cgi->self_url 给了我这个意外的短 URL,并附加了参数名称(即 myhost.com/myapp/service/name/delivery?NAME=delivery)。

有人可以帮忙吗?

Perl 代码如下所示:

 use CGI;

    my $cgi = CGI_>new();
    my $url = $cgi->self_url;
    my $service_name = $cgi->param('NAME');

    # In ideal case $url will hold 
    # myhost.com/myapp/perlcode/cgi_script.pcgi?NAME=delivery
    # then it substitutes the $url based on the $service_name and redirects
    if ($service_name eq 'delivery') {

        $url =~ s!/myapp/perlcode/cgi_script\.pcgi\NAME=$service_name!/myapp/percode/service!;
        $cgi->redirect($url);
    } elsif ($service_name eq 'order') {
         # does similar operation as above
     }

【问题讨论】:

    标签: apache perl .htaccess redirect mod-rewrite


    【解决方案1】:

    您只是缺少[PT] passthrough 标志,它会将修改后的 URL 重新提交到映射过程

    没有它,结果被假定为文件路径,其中上下文?NAME=delivery没有意义

    【讨论】:

    • 嗨鲍罗丁,还是没有运气!我同时使用了 [L,PT] 和 [PT] 但没有发现任何变化。谢谢。
    • 你如何测试这个?你谈论一些 Perl 代码。请让我们看看它在做什么?
    • This 可能有用,但我不能直接推荐它
    • 嗨,我已经添加了 Perl 代码编辑我的第一篇文章,请看一下。
    【解决方案2】:

    我检查了系统中使用的 CGI.pm 版本。 版本是 5.14.1,其中一些子例程发生了变化 它们在早期版本中(例如:5.6.1)。

    由于 CGI.pm 中子程序子 url 的变化,输出是我不想要的。

    我认为这不是 .htaccess 问题。

    一如既往地感谢您的帮助。

    【讨论】:

    • CGI 的最新版本是 4.27。您从哪里获得 v5.6.1 和 v5.14.1?此外,我看不出该模块如何对 Apache 的重写引擎产生任何影响。但是,如果您找到了适合您的解决方案,那么做得很好
    • 您好 Borodin,我为您的查询添加了另一个答案。非常感谢。
    【解决方案3】:

    我很抱歉。我提到 Perl 版本为 5.14.1。 给我意外输出的 CGI.pm 版本是 3.52,而给出预期输出的早期 CGI.pm 版本是 2.752。

    很明显,CGI 模块在 2.752 和 3.52 之间经历了几次变化。有兴趣的可以看这里http://cpansearch.perl.org/src/MARKSTOS/CGI.pm-3.52/Changes

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-25
      • 2019-04-04
      • 2016-01-20
      • 2015-03-07
      • 2015-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多