我有一组要进行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;
}
显然那是不对的。总之:
/[0-9]+/
如果URL以结尾,我只想得到一部分/expired/
。/[0-9]+/foo/
或/[0-9]+/bar/
部分以foo或bar结尾。/[0-9]+/
如果那是它的结尾,那只是一部分。/old/
则只需重定向至/new/
只要斜线可以,下面的正则表达式就可以与PCRE一起使用。
^/old/([0-9]+/.*?)?(?:expired/)?$
^/old/
->从开始到/ old匹配所有内容([0-9]+/.*?)?
->(可选)在LAZILY之后匹配数字/和任何文本。显然,匹配不仅限于foo和bar。(?:expired/)?$
->可选,match过期,在上一步中的懒惰状态下,引擎将继续逐字符检查char,然后,如果过期,并且字符串的末尾是下一个字符,则过期将从捕获组中删除。使用/ new / $ 1的结果:
/new/
/new/1234/
/new/1234/foo/
/new/1234/bar/
/new/1234/
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句