使用 nginx 重写从 url 中删除 id 或数字

使用 nginx 重写从 url 中删除 id 或数字

我有一个网站在自定义 CSM 上运行。但是,随着它变得越来越大,我们不得不将其转移到 wordpress。

在旧的 CMS 中,我们的文章的 URL 结构与此类似:

https://example.com/parent-category/child-category/7564-title-of-the-article
https://example.com/parent-category
https://example.com/parent-category/child-category

我们希望将所有对旧文章的请求重定向到此结构

https://example.com/title-of-the-article
https://example.com/category/parent-category
https://example.com/category/parent-category/child-category

此处的类别是 WordPress 的类别标签

我确实在 nginx 中尝试了一些重定向规则,但事实证明我不擅长正则表达式。我一无所知。请帮我做一下。我不知道该向哪里求助。

我们将不胜感激。

更新:编辑了原始链接结构,以消除关于“类别”是静态 slug 的混淆。它不是。有多个类别和子类别:

https://example.com/review/app/734-title-of-the-post
https://example.com/news/546-title-of-the-post
https://example.com/blog/opinion/456-title-of-the-post

答案1

假设“类别”是文字,“某物”是占位符,那么以下内容可能适合您:

rewrite ^/category/[^/]+/\d+-(.+)$ /$1 permanent;

如果只有旧的 CMS URI 以 开头/category,则可以将重写放在位置块内以提高效率:

location ^~ /category/ {
    rewrite ^/category/[^/]+/\d+-(.+)$ /$1 permanent;
}

此链接寻求正则表达式的帮助。

答案2

使用以下 RewriteRules。它必须按照您的要求工作。

https://example.com/parent-category/child-category/7564-title-of-the-article

RewriteRule ^/parent-category/([^\/]+)/([0-9]+)-([^\/]+)$ /parent-category/$1/$3 [R=301,L,NE]

https://example.com/parent-category/546-title-of-the-post

RewriteRule ^/parent-category/([0-9]+)-([^\/]+)$ /parent-category/$2 [R=301,L,NE]

相关内容