重写 nginx 不捕获可选值

重写 nginx 不捕获可选值

我正在将配置迁移到新的 CMS,当前页面中有结构为“/view-article/ID”的 URL,一些缩短的链接在末尾添加了参数,如“/view-article/ID/{RAMDON|undefined|others}”。

我想将此 url 重定向到新的结构“/id/ID”,但是在投入生产之前,我正在对 PCRE 正则表达式的在线发布者进行测试,并且我无法创建正则表达式来匹配 CMS 的 url 并向其中添加缩短(丢弃添加的参数)。

我的设置如下:

location ~* ^/view-article {

    #rewrite ^/view-article/(.*)(?:\/.+) $scheme://$host/id/$1 permanent;
    rewrite ^/view-article/(.*) $scheme://$host/id/$1 permanent;
}

当前 URL 的示例应位于新的 cms 中:

/view-article/45356 -> /id/45356
/view-article/4a57f -> /id/4a57f
/view-article/4a57f/undefined -> /id/4a57f 
/view-article/4a57f/ramdon -> /id/4a57f
/view-article/4a57f/88484 -> /id/4a57f
/view-article/aabb3/jddt65 -> /id/aabb3

您认为它正确吗?我该如何让它发挥作用?谢谢

答案1

你不想捕捉一切,仅显示从 ID 到下一个斜线的文本(如果有)。因此,它(.*)不会执行您想要的操作,因为它会捕获所有内容。

而是捕获直到以下斜线(如果存在):

rewrite ^/view-article/([^/]+) /id/$1 permanent;

(当相对 URL 就足够时,也没有理由自己重建整个 URL。也没有理由将其放在特殊的中location,所以不要费心。)

相关内容