我正在尝试编写一个 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;