首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >regex在nginx中重写以匹配URL中的年份

regex在nginx中重写以匹配URL中的年份
EN

Server Fault用户
提问于 2019-09-19 11:35:10
回答 1查看 781关注 0票数 1

我正在尝试编写一个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的文章:

代码语言:javascript
复制
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的其余部分保持原样。

EN

回答 1

Server Fault用户

回答已采纳

发布于 2019-09-19 12:14:09

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

如果值保持不变,则不需要在替换URI中指定https://example.com。详情请参见本文件

在问题中的示例中,捕获了两个值($1$2),但只在替换URI中使用了一个值。

尝试:

代码语言:javascript
复制
rewrite "^/(19|[2-9][0-9])\d{2}/(.*)/feed/?$" /$1/$2/ permanent;

您提到.*也匹配零个字符,但是.+至少匹配一个字符。此外,在模式中放置多个/字符可以避免/feed边缘条件。

例如:

代码语言:javascript
复制
rewrite ^(/.+/)feed/?$ $1 permanent;
票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/984840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档