nginx 中的正则表达式重写以匹配 URL 中的年份

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,以及它是否真的会从 URL 中截取部分,/feed/而保留 URL 的其余部分。

答案1

不确定 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;

相关内容