为什么apache在RewriteRule中匹配一次String而不是一次?

时间:2015-12-02 11:22:08

标签: regex apache .htaccess mod-rewrite

我在应用的htaccess中有一个RewriteRule,它应该与那种字符串完全匹配:01,02,03,04并将其作为GET param(如&option=$2)附加到url。但是,他匹配01,02,03,04,将其添加为$option=$2,然后再次匹配04并将其附加为$otheroption=$3。我在这里缺少什么?

RewriteRule  ^([a-zA-Z0-9_\-]+)/([a-zA-Z0-9_-]+)/(([0-9]{2}[,]?)+)/([a-zA-Z]+)$ /index.php?site=$1&content=$2&objektart=$3&vermarktungsart=$4 [QSA,L]

2 个答案:

答案 0 :(得分:1)

(([0-9]{2}[,]?)+)中有双括号,因此该部分会两次捕获您的第三个参数。您可以使用set中的第5个结果而不是第4个结果,甚至可以更好地使用非捕获组。由于您只想在此处创建一个角色类,因此可以使用非捕获组:

RewriteRule  ^([a-zA-Z0-9_\-]+)/([a-zA-Z0-9_-]+)/((?:[0-9]{2}[,]?)+)/([a-zA-Z]+)$ /index.php?site=$1&content=$2&objektart=$3&vermarktungsart=$4

注意内部括号开头的?:。这意味着内容被视为一个组,但不适用于结果集。

输入

aaa/bbb/3333/ccc

这将产生输出

/index.php?site=aaa&content=bbb&objektart=3333&vermarktungsart=ccc

答案 1 :(得分:0)

我找到了一个解决方案([0-9,]{2,}),但我仍然认为上面的解决方案也应该成功...