我正在尝试编写一个 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 中只使用了一个。尝试:
您提到
.*
也匹配零个字符,但是至少.+
匹配一个字符。此外,在图案中放置多个字符可以避免边缘条件。/
/feed
例如: