Apache RewriteRule仅在模式前面带有等号时才匹配

时间:2014-02-20 09:34:47

标签: regex apache .htaccess mod-rewrite rewrite

我正在尝试重写任何以数字序列和大写字母结尾的网址。不幸的是,我只取得了部分成功。这是我的.htaccess文件:

RewriteEngine On
RewriteRule [A-Z0-9]+$ index.php?r=wizard/index&key=$1 [L]

出于某种原因,这仅适用于以

结尾的网址
key=QO106A654O65NN6828N

如果网址中缺少等号

keyQO106A654O65NN6828N

网址不匹配。我不明白为什么这个等号是重要的,因为它甚至不是正则表达式的一部分。可能导致这种行为的原因是什么?

根据要求,除非如上所述插入'='符号,否则一些示例网址不起作用:

/index.php?r=wizard/index&id&key4C2918IFIY3U4APKOI1
/index.php?r=wizard/index&id\xEF\xBF\xBD&keyQO106A654O65NN6828N

1 个答案:

答案 0 :(得分:0)

您无法使用重写规则匹配QUERY_STRING。

你的规则如下:

RewriteEngine On

RewriteCond %{QUERY_STRING} (?:^|&)key([A-Z0-9]+)$
RewriteRule ^(index\.php)?$ $1?r=wizard/index&key=%1 [L,NE]