【问题标题】:capture first value of group RegEx捕获组 RegEx 的第一个值
【发布时间】: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


    【解决方案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/

    【讨论】:

    • 我只是没看懂?:,它是干什么用的?
    • 嗨@anubhava,我有最后一个请求:有时我的网址中有2个“/”并且不知道它们来自哪里(site.com/store//category/ ) 那么如何更改您给我的规则,以便将双斜杠重定向到正确的 URL?谢谢
    • 感谢您的及时回复;)我回家后会尝试并通知您;)
    • 酷,我在thread 中找到了你的答案 :) 再次感谢 ;)
    猜你喜欢
    • 1970-01-01
    • 2019-10-01
    • 2021-11-29
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 2016-01-04
    • 2018-06-04
    相关资源
    最近更新 更多