Nginx
在 nginx 中重寫正則表達式以匹配 URL 中的年份
我正在嘗試編寫一個 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;