我有一组 URL,我正在为其进行 301 重定向(使用 Nginx,我认为它的 Regex 引擎使用 PCRE)。这是所需内容的简化版本:
/old/
/new//old/1234/
/new/1234//old/1234/foo/
/new/1234/foo//old/1234/bar/
/new/1234/bar//old/1234/expired/
/new/1234/即对此的过度简化可能是说/old/(.*)重定向到/new/$1,除非 url 的最后一部分是/[0-9]+/expired/,在这种情况下它只会上升一个级别。(除非我真的需要使用foo,bar expired和1234与 URL 匹配的部分使其更具体)。
如果可能,我想在一个正则表达式中涵盖所有这些,而不是为每个变体设置多个规则。
所以到目前为止我的正则表达式Nginx.conf是这样的:
location ~* ^/old/(([0-9]+/)expired/)?|([0-9]+/(foo|bar/)?)?$ {
return 301 /new/$1;
}
Run Code Online (Sandbox Code Playgroud)
显然这是不对的。总之:
/[0-9]+/如果URL结尾部分/expired/。/[0-9]+/foo/或/[0-9]+/bar/部分。/[0-9]+/如果这就是它的结尾,那只是一部分。/old/那么只需重定向到/new/只要斜线没问题,下面的正则表达式应该适用于 PCRE。
^/old/([0-9]+/.*?)?(?:expired/)?$
Run Code Online (Sandbox Code Playgroud)
^/old/ -> 匹配从开始到 /old 的所有内容([0-9]+/.*?)?-> 可选择匹配数字/和 LAZILY 之后的任何文本。显然,匹配的不仅仅是 foo 和 bar。(?:expired/)?$ -> 可选匹配expired,与上一步中的lazy 引擎会继续逐个字符检查,然后如果它已过期并且字符串的结尾是下一个,则expired 将从捕获组中删除。使用 /new/$1 的结果:
/new/
/new/1234/
/new/1234/foo/
/new/1234/bar/
/new/1234/
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5070 次 |
| 最近记录: |