Nginx - 将所有先前子域的子目录重定向到主域的子目录

Nginx - 将所有先前子域的子目录重定向到主域的子目录

在 Nginx 中,我希望将我的blog.example.com子域重定向到主网站 ( example.com/blog) 的子目录。blog.example.com 子域下有许多博客文章。许多链接都指向这个旧 URL,我想为所有blog.example.com/*链接(该先前子域的所有子目录链接)设置一个万能重定向,现在转到该重定向example.com/*(每个帖子都应位于 example.com 域的根目录中 - 而不是/blog单个帖子的子目录中)。

我目前已将子域名重定向至example.com使用:

server {
  server_name  blog.example.com;
  location / {
    return 301 https://example.com/blog;
  }

有人能提供一些关于为前一个子域名的所有子目录设置 301 的提示吗?(仅供参考:example.com 上已存在同名的所有页面)。

答案1

如果我理解正确的话,旧网站上有两种类型的 URI,一种带有嵌入/(即子目录),一种不带有嵌入(单个帖子)。

类似这样的方法可能会有效:

location / {
    return 301 https://example.com/blog$request_uri;
}

location ~ ./ {
    return 301 https://example.com$request_uri;
}

第二个位置块使用正则表达式来匹配/第二个或后续位置上带有 的任何 URI。

答案2

您可以使用它进行重定向:

server {
    server_name blog.example.com;

    return 301 https://example.com$request_uri;
}

这会重写每个 URL ,https://blog.example.com/blog-post例如https://example.com/blog_post

相关内容