2015-10-05 57 views
0

我有一個可以有可選額外字段的url的路由。它可以是以下形式:nginx正則表達式 - 匹配可變數量的字段

  • 「/my-route/azezaezaeazeaze.123x456.jpg」
  • 「/my-route/azezaezaeazeaze.123x456.6786786786.jpg」

與:

  • 「azezaezaeazeaze」 被一個mongoId
  • 123x456兩個整數由 「x」
  • 分離6786786786一個unix時間戳
  • jpg一個圖像擴展名(可能是jpeg,png,gif ...)
  • 所有這些都由「。」分隔。

我想通過http rewrite模塊從請求中刪除可選部分(時間戳)。因此,第二個網址實際上成爲第一個網址。

我做了一個小測試上regex101拿到羣體,但: - 它似乎並沒有成爲nginx的 正確的語法 - 我不知道它將如何讓我刪除時間戳

如何從該網址中刪除時間戳?

回答

1

從右端開始,你需要匹配一個點,然後什麼 除了一個點,所以我們必須(\.[^.]*)$,然後向左移動,我們要 匹配一個點,然後僅使用數字\.[0-9]*,我們不想 捕獲,然後在左邊我們想要的一切。 我結束了這樣的事情:

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

所以它匹配的網址,但它不是正確地重寫它。我試圖找出問題所在。 – nha

+1

抱歉,'\ 1 \ 2'是您regex101示例中替換的語法。對於nginx應該是'$ 1 $ 2'。至於旗幟,這取決於你的其他設置。 – meuh

+0

你好,我接受了你的答案。你會說你的正則表達式比我的效率更高(因爲它對數字看起來更嚴格)? – nha

0

善用我第一次嘗試和@meuh答案,我結束了以下內容:

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

現在它的工作原理,但我會歡迎任何評論關於這種重寫的風格/效率。