【问题标题】:URL Redirect Rule - Regex - How To Capture Part Of URLURL 重定向规则 - 正则表达式 - 如何捕获部分 URL
【发布时间】:2015-05-01 19:49:49
【问题描述】:

我正在尝试编写一个重定向规则,该规则仅在匹配语言环境时才重定向用户:en-us、zh-tw、fr-be。如果它们与这些语言环境不匹配,则规则将忽略它们。用户将被重定向到仅包含其国家/地区代码的另一个站点。

foo.com/en-us/bar => foo2.com/us/bar2 foo.com/zh-tw/bar => foo2.com/tw/bar2 foo.com/fr-be/bar => foo2.com/be/bar2

这是我的尝试,但我不确定如何从 $1 中提取最后两个字符:

^/?foo.com/([en-us|zh-tw|fr-be])/bar$ => http://foo2.com/$1/bar2 ^/?foo.com/[en-(us)|zh-(tw)|fr-(be)]/bar$ => http://foo2.com/$1/bar2

【问题讨论】:

    标签: regex url-redirection


    【解决方案1】:

    尝试: ^/?foo.com/(en)-(us)|(zh)-(tw)|(fr)-(be)(/bar)$
    $0 --> foo2.com/$2$4$6$7

    在 PHP 中测试。适用于所有测试用例并排除其他组合。

    【讨论】:

    • 不用这么多变量也能达到安全的效果吗?
    • @Jon,没有。为什么这么多占位符有问题?
    • 在我的示例中,我只有 3 个语言环境。在我的实际代码中,我有 20 多个语言环境(而且这个列表只会增加)。
    • @Jon,我仍然没有发现问题。如果正则表达式不能解决您的问题,那么字符串解析将是下一个选择。
    【解决方案2】:

    如果您知道您将使用两字符语言后跟两个字符国家/地区的格式,您可以尝试:

    给定“foo.com/fr-be/bar”

    ^/?foo.com/(\w{2})-(\w{2})/bar$

    $1 == fr $2 == 是

    【讨论】:

    • 如何将捕获限制在某些区域?
    猜你喜欢
    • 2019-06-04
    • 1970-01-01
    • 2011-10-07
    • 2018-05-17
    • 2014-09-04
    • 2022-01-12
    • 2017-01-30
    • 1970-01-01
    • 2020-03-28
    相关资源
    最近更新 更多