Nginx

在 nginx 中重寫正則表達式以匹配 URL 中的年份

  • September 19, 2019

我正在嘗試編寫一個 nginx 重寫指令,該指令將 URL 重定向https://website.com/2018/11/20/dummytext/feed/https://website.com/2018/11/20/dummytext/(最後刪除/feed/)。

我不能只做一個匹配,(.*)/feed/因為我不想重定向https://website.com/feed/

我創建了這個正則表達式,它最終與 /feed/ 匹配所有文章,這似乎有效: https ://www.regextester.com/?fam=111507

這就是我在 nginx 中所擁有的:

rewrite "^\b(19|[2-9][0-9])\d{2}\b\/(.*)\/feed\/?$" https://website.com/$1 permanent;

第一個問題是它似乎不起作用(我已經重新啟動了 nginx)。當我訪問一個 URL時,https://website.com/2018/11/20/dummytext/feed/我不會被重定向到任何地方。第二個問題是我不確定這部分https://website.com/$1是否真的會/feed/從 URL 中刪除,保持 URL 的其餘部分不變。

不確定 Nginx 是否支持\b,但您只需要使用/(不帶反斜杠)。

https://example.com如果值保持不變,則無需在替換 URI 中指定。有關詳細資訊,請參閱此文件

在您問題的範例中,擷取了兩個值($1$2),但在替換 URI 中只使用了一個。

嘗試:

rewrite "^/(19|[2-9][0-9])\d{2}/(.*)/feed/?$" /$1/$2/ permanent;

您提到.*也匹配零個字元,但是至少.+匹配一個字元。此外,在圖案中放置多個字元可以避免邊緣條件。/``/feed

例如:

rewrite ^(/.+/)feed/?$ $1 permanent;

引用自:https://serverfault.com/questions/984840