【问题标题】:.htaccess RewriteRule for abc/xyz/myfile?s=t.htaccess RewriteRule for abc/xyz/myfile?s=t
【发布时间】:2016-06-11 18:57:33
【问题描述】:

我是新手。我想要一个在表单上转换 URL 的重写规则:

abc/xyz/myfile?s=t

index.php?id=abc&a=xyz&b=myfile.xml&s=t

abc 是固定前缀。 xyz、myfile 和查询字符串被反向引用。

这是 .htaccess 文件:

RewriteEngine On
RewriteRule ^abc/([_0-9a-z]+)/([_0-9a-z]+)\?(.+)$ index.php?id=abc&a=$1&b=$2.xml&$3 [NC]

它不起作用。我使用以下 perl 脚本调试了重写规则:

#!perl
use strict;
use autodie;
$_ = "abc/xyz/myfile?s=t";
if ( /^abc\/([_0-9a-z]+)\/([_0-9a-z]+)\?(.+)$/ ) {
    print "index.php?id=abc&a=$1&b=$2.xml&$3";
}

输出是:

index.php?id=abc&a=xyz&b=myfile.xml&s=t

为什么 .htaccess 文件不起作用?

编辑:似乎结果 URL 中的最后一个参数 (s=t) 被忽略了。

【问题讨论】:

    标签: apache perl .htaccess mod-rewrite


    【解决方案1】:

    你需要使用:

    RewriteEngine On
    RewriteCond %{QUERY_STRING}  ^(.+)$
    RewriteRule ^abc/([_0-9a-z]+)/([_0-9a-z]+)$ index.php?id=abc&a=$1&b=$2.xml&%1 [NC]
    

    因为查询字符串不是rewriterule left url的一部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多