Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 为什么apache在重写规则中两次匹配字符串而不是一次?_Regex_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Regex 为什么apache在重写规则中两次匹配字符串而不是一次?

Regex 为什么apache在重写规则中两次匹配字符串而不是一次?,regex,apache,.htaccess,mod-rewrite,Regex,Apache,.htaccess,Mod Rewrite,我在应用的htaccess中有一个重写规则,它应该与那种字符串完全匹配:01,02,03,04,并将其作为GET参数附加到url中,如&option=$2。但相反,他匹配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=$

我在应用的htaccess中有一个重写规则,它应该与那种字符串完全匹配:
01,02,03,04
,并将其作为GET参数附加到url中,如
&option=$2
。但相反,他匹配
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]

(([0-9]{2}[,]?)+)
中有两个括号,因此该部分两次捕获第三个参数。您可以使用集合中的第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

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

您可能需要编辑您的问题,因为预期结果和实际结果似乎是一样的。另外,请为输入和输出添加示例URL,但如果我将其设置为
([0-9]{2}[,]?)+
,则只捕获最后一个数字。更新了您似乎需要的非捕获组的答案。很好。我想这就是我在这里错过的。谢谢你提出来。因为它更优雅,所以我会选择它。