.htaccess重写规则为abc / xyz / myfile?s = t

时间:2016-02-28 20:09:59

标签: apache perl .htaccess mod-rewrite

我是个新手。我想要一个翻译规则来翻译表单上的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文件不起作用?

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

1 个答案:

答案 0 :(得分:2)

您需要使用:

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的一部分。