2014-02-20 18 views
1

我正在尝试重写任何以数字和大写字母序列结尾的网址。不幸的是,我只获得了部分成功。这是我的.htaccess文件:Apache RewriteRule只匹配前缀为等号的图案

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

出于某种原因,这仅适用于我的网址上

key=QO106A654O65NN6828N 

为此如果等号从URL中缺少这样的

keyQO106A654O65NN6828N 

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

按照要求的一些示例网址如上所述除非一个“=”符号被插入不工作:

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

你能告诉这些URL的一些例子吗? – anubhava

+0

我已经添加了一些示例 – Ylan

回答

0

使用重写规则不能匹配QUERY_STRING。

让你的规则是这样的:

RewriteEngine On 

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

谢谢。然而,现在没有'='符号的网址被重定向到这样的网址 /?r=wizard/index&key=4C2918IFIY3U4APKOI1&r=wizard/index&id&key4C2918IFIY3U4APKOI1 – Ylan

+0

现在检查更新的代码。 – anubhava

+0

太棒了!这样可行。非常感谢。当我有更多时间时,我会试着理解这段代码。 – Ylan