正则表达式多个带有可选参数的URL,一些URL需要反向引用,有些则不需要

邓肯

我有一组要进行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/,在这种情况下,它只是向上一级。(除了我确实需要使用foobar 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/
丹尼尔·吉梅内斯(Daniel Gimenez)

只要斜线可以,下面的正则表达式就可以与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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么有些程序需要-h而另一些则不需要

来自分类Dev

为什么有些类需要main方法,而另一些则不需要呢?

来自分类Dev

为什么有些角度指令需要双重卷曲,而另一些则不需要?

来自分类Dev

为什么/为什么有些类需要每个可能的参数,而有些则不需要?

来自分类Dev

为什么有些库需要嵌入而有些则不需要?

来自分类Dev

如何使用正则表达式查找带有一些前缀的可选组

来自分类Dev

正则表达式有多个组,其中一些是可选的

来自分类Dev

需要一些帮助以正则表达式匹配JWT和URL中的资源

来自分类Dev

为什么有些C#api方法需要[HttpPost]而有些则不需要?

来自分类Dev

为什么有些程序需要Path值,而另一些程序在Windows中却不需要?

来自分类Dev

带有正则表达式的Pandas groupby捕获系列中不需要的元素

来自分类Dev

为什么有些程序需要安装,而其他程序则不需要?

来自分类Dev

为什么有些 JavaScript 函数需要创建一个新变量,而有些则不需要?

来自分类Dev

在 PyQT 中为什么有些小部件在调用它们之前需要“self”参数,而有些则不需要

来自分类Dev

正则表达式有些困难

来自分类Dev

带有 Concat 的 MariaDB 正则表达式只能捕获一些结果

来自分类Dev

正则表达式:删除带有一些符号的数字

来自分类Dev

带有一些空格的正则表达式字母数字

来自分类Dev

在 Flutter 中使用正则表达式验证 URL,而不需要它

来自分类Dev

为什么列表结构中的某些功能需要“列表”前缀,而有些则不需要?

来自分类Dev

需要知道一些正则表达式背后的逻辑

来自分类Dev

熊猫正则表达式需要一些清洁

来自分类Dev

我需要一些关于 javascript 中特定正则表达式的帮助

来自分类Dev

问题正则表达式,如何使用搜索表单处理带有可选参数的多个视图 URL

来自分类Dev

如何在 R 正则表达式中排除一些模式,有些可能是 2 个或更多字符

来自分类Dev

有条件的正则表达式-不需要的输出

来自分类Dev

正则表达式跳过不需要的所有格

来自分类Dev

bash正则表达式,带有一些后缀,但没有一个特定的后缀

来自分类Dev

带有折叠表达式的模板会创建不需要的参数副本

Related 相关文章

  1. 1

    为什么有些程序需要-h而另一些则不需要

  2. 2

    为什么有些类需要main方法,而另一些则不需要呢?

  3. 3

    为什么有些角度指令需要双重卷曲,而另一些则不需要?

  4. 4

    为什么/为什么有些类需要每个可能的参数,而有些则不需要?

  5. 5

    为什么有些库需要嵌入而有些则不需要?

  6. 6

    如何使用正则表达式查找带有一些前缀的可选组

  7. 7

    正则表达式有多个组,其中一些是可选的

  8. 8

    需要一些帮助以正则表达式匹配JWT和URL中的资源

  9. 9

    为什么有些C#api方法需要[HttpPost]而有些则不需要?

  10. 10

    为什么有些程序需要Path值,而另一些程序在Windows中却不需要?

  11. 11

    带有正则表达式的Pandas groupby捕获系列中不需要的元素

  12. 12

    为什么有些程序需要安装,而其他程序则不需要?

  13. 13

    为什么有些 JavaScript 函数需要创建一个新变量,而有些则不需要?

  14. 14

    在 PyQT 中为什么有些小部件在调用它们之前需要“self”参数,而有些则不需要

  15. 15

    正则表达式有些困难

  16. 16

    带有 Concat 的 MariaDB 正则表达式只能捕获一些结果

  17. 17

    正则表达式:删除带有一些符号的数字

  18. 18

    带有一些空格的正则表达式字母数字

  19. 19

    在 Flutter 中使用正则表达式验证 URL,而不需要它

  20. 20

    为什么列表结构中的某些功能需要“列表”前缀,而有些则不需要?

  21. 21

    需要知道一些正则表达式背后的逻辑

  22. 22

    熊猫正则表达式需要一些清洁

  23. 23

    我需要一些关于 javascript 中特定正则表达式的帮助

  24. 24

    问题正则表达式,如何使用搜索表单处理带有可选参数的多个视图 URL

  25. 25

    如何在 R 正则表达式中排除一些模式,有些可能是 2 个或更多字符

  26. 26

    有条件的正则表达式-不需要的输出

  27. 27

    正则表达式跳过不需要的所有格

  28. 28

    bash正则表达式,带有一些后缀,但没有一个特定的后缀

  29. 29

    带有折叠表达式的模板会创建不需要的参数副本

热门标签

归档