我是个新手。我想要一个翻译规则来翻译表单上的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)。
答案 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的一部分。