我正在将配置迁移到新的 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
,所以不要费心。)