捕获组RegEx的第一个值

时间:2015-09-21 14:14:00

标签: regex apache .htaccess mod-rewrite

为了禁止在我的网站http://domain.com/en/fr/es/中重复多个语言文件夹重复,我设置了以下规则:

RewriteRule ^([a-z]{2}/){2,}(.*)$ /$1$2 [R=301,L]

它工作得很好但我的问题是第一个捕获的组返回es,但我想获得第一个语言文件夹en。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

将您的规则更改为:

RewriteRule ^([a-z]{2}/)(?:[a-z]{2}/)+(.*)$ /$1$2 [R=302,L]

您的模式中的问题是([a-z]{2}/){2,}en/fr/es/的所有内容匹配,并在捕获的群组中保留es/

根据我建议的正则表达式,我们将仅捕获第一个捕获组中的en/,然后下一个非捕获组将匹配fr/es/,从而根据需要使用$1=en/