我正在尝试编写一个nginx重写指令,该指令将像https://website.com/2018/11/20/dummytext/feed/这样的URL重定向到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)。当我访问像https://website.com/2018/11/20/dummytext/feed/这样的URL时,我不会被重定向到任何地方。第二个问题是,我不确定这个部分的https://website.com/$1,以及它是否真的会将/feed/从URL中删除,保持URL的其余部分保持原样。
发布于 2019-09-19 12:14:09
不确定Nginx是否支持\b,但您只需要使用/ (没有反斜杠)。
如果值保持不变,则不需要在替换URI中指定https://example.com。详情请参见本文件。
在问题中的示例中,捕获了两个值($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
复制相似问题