【发布时间】:2015-07-30 14:21:39
【问题描述】:
我有一组我正在执行 301 重定向的 URL(使用 Nginx,我认为它使用 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/,在这种情况下它只会上升一个级别。 (除非我真的需要使用与 URL 匹配的 foo、bar、expired 和 1234 部分保持更具体)。
如果可能,我想在一个正则表达式中涵盖所有这些,而不是为每个变体设置多个规则。
所以到目前为止我在Nginx.conf 中的正则表达式类似于:
location ~* ^/old/(([0-9]+/)expired/)?|([0-9]+/(foo|bar/)?)?$ {
return 301 /new/$1;
}
显然这是不对的。总结:
- 如果 url 以
/expired/结尾,我只想获取/[0-9]+/部分。 - 以及整个
/[0-9]+/foo/或/[0-9]+/bar/部分,如果它以 foo 或 bar 结尾。 - 只有
/[0-9]+/部分,如果这就是它的结尾。 - 如果它只是以
/old/结尾,那么只需重定向到/new/
【问题讨论】: