我有一组我正在做的301重定向的URL(使用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;
}显然这不对。总结如下:
/expired/结尾,我只想得到/expired/部分。/[0-9]+/foo/或/[0-9]+/bar/部分。/[0-9]+/部分,如果这是它的结尾。/old/结尾,那么只需重定向到/new/发布于 2015-07-30 14:53:16
只要斜杠没有问题,下面的正则表达式就应该适用于PCRE。
^/old/([0-9]+/.*?)?(?:expired/)?$^/old/ ->匹配从开始到/old的所有内容([0-9]+/.*?)? ->可以选择地匹配数字/和懒惰后的任何文本。显然,匹配的不仅仅是foo和酒吧。(?:expired/)?$ ->可选地匹配过期,在前面的步骤中,引擎将继续逐字符检查char,如果它过期并且字符串的结尾为next,则过期将从捕获组中删除。使用/新/1美元的结果:
/new/
/new/1234/
/new/1234/foo/
/new/1234/bar/
/new/1234/https://stackoverflow.com/questions/31726362
复制相似问题