nginx正则表达式 - 匹配可变数量的字段

时间:2015-10-05 15:11:57

标签: regex nginx

我有一个带有网址的路由,可以有一个可选的额外字段。它可以是以下形式之一:

  • " /my-route/azezaezaeazeaze.123x456.jpg"
  • " /my-route/azezaezaeazeaze.123x456.6786786786.jpg"

with:

  • " azezaezaeazeaze"是一个mongoId
  • 123x456由" x"
  • 分隔的两个整数
  • 6786786786 a unix timestamp
  • jpg图片扩展名(可能是jpeg,png,gif ...)
  • 所有这些都由"。"
  • 分隔

我想使用http rewrite模块从请求中删除可选部分(时间戳)。所以第二个网址实际上是第一个谎言。

我在regex101上做了一个小测试来获取组,但是:   - 它似乎不是nginx的正确语法   - 我没看到它如何允许我删除时间戳

如何从该网址中删除时间戳?

2 个答案:

答案 0 :(得分:1)

从右端开始,您需要匹配一个点后跟任何东西 除了一个点,所以我们有(\.[^.]*)$,然后向左移动,我们想要 匹配一个点后跟只有数字\.[0-9]*,这是我们不想要的 捕获,然后在我们想要的一切的左边。 我最终得到了类似的东西:

rewrite ^(.*)\.[0-9]*(\.[^.]*)$ $1$2 ;

答案 1 :(得分:0)

利用我的第一次尝试和@meuh回答,我最终得到了以下内容:

rewrite ^(/.*\..*)(\..*)(\..*)$ $1$3 last;

现在它有效,但我欢迎任何有关此重写的风格/效率的评论。