【发布时间】:2015-09-21 14:14:00
【问题描述】:
为了在我的网站http://domain.com/en/fr/es/ 中禁止多语言文件夹重复,我设置了以下规则:
RewriteRule ^([a-z]{2}/){2,}(.*)$ /$1$2 [R=301,L]
效果很好,但我的问题是第一个捕获的组返回es,但我想获得第一个语言文件夹en。我该怎么做?
【问题讨论】:
标签: regex apache .htaccess mod-rewrite
为了在我的网站http://domain.com/en/fr/es/ 中禁止多语言文件夹重复,我设置了以下规则:
RewriteRule ^([a-z]{2}/){2,}(.*)$ /$1$2 [R=301,L]
效果很好,但我的问题是第一个捕获的组返回es,但我想获得第一个语言文件夹en。我该怎么做?
【问题讨论】:
标签: regex apache .htaccess mod-rewrite
把你的规则改成这样:
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/。
【讨论】:
?:,它是干什么用的?