Redirect 如何设置嵌套子文件夹到子域Nginx 301重定向

Redirect 如何设置嵌套子文件夹到子域Nginx 301重定向,redirect,nginx,Redirect,Nginx,我正在尝试设置Nginx重定向,将几个旧论坛设置中的任何URL重写到新论坛。旧论坛从子文件夹运行,而当前论坛从同一站点的子域运行 因此,例如,我希望对site.com/ask的任何请求被重定向到forum.site.com的首页。因为我正在处理3个旧论坛,所以我尝试设置一个嵌套重定向,如下所示: location ~ ^/\~([^/]+)/(.*)$ { location ~ ^/\~ask/(.*)$ { rewrite ^(.*)$ http://forum.site.com$

我正在尝试设置Nginx重定向,将几个旧论坛设置中的任何URL重写到新论坛。旧论坛从子文件夹运行,而当前论坛从同一站点的子域运行

因此,例如,我希望对site.com/ask的任何请求被重定向到forum.site.com的首页。因为我正在处理3个旧论坛,所以我尝试设置一个嵌套重定向,如下所示:

location ~ ^/\~([^/]+)/(.*)$ {
  location ~ ^/\~ask/(.*)$ {
    rewrite ^(.*)$ http://forum.site.com$1 permanent;     
  }

  location ~ ^/\~forum/(.*)$ {
    rewrite ^(.*)$ http://forum.site.com$1 permanent;     
  }

  location ~ ^/\~qa/(.*)$ {
    rewrite ^(.*)$ http://forum.site.com$1 permanent;     
  }
}
根据上述规则,只有第一条规则有效,并且部分有效。例如,对site.com/ask的请求被重定向到forum.site.com,这很好,但对site.com/ask/what-is-this的任何请求都会转到forum.site.com/404

请求site.com/forum和site.com/qa根本不起作用

我相信有一种更简单的方法可以做到这一点,但我不想花几天的时间去想办法

欢迎并感谢您的意见

编辑:

上面的代码没有任何用处,我将其简化为:

location ~ ^/\~([^/]+)/(.*)$ {
            location ~ ^/\~(qa|forum|ask)/(.*)$ {
                  rewrite ^/~(qa|forum|ask)/(.*)$ http://forum.site.com$1 permanent;
            }
    }

但结果仍然是一样的。有什么想法吗?

实际上,你想将用户重定向到你论坛的主页,而不管他来到哪个页面。试试这个

location /qa/ {
    return 301 http://forum.site.com;
}

location /ask/ {
    return 301 http://forum.site.com;
}

location /forum/ {
    return 301 http://forum.site.com;
}

在您的评论中,您提到了
site.com/ask
,但您的代码是针对
site.com/~ask/
。哪个是对的?也许这就是问题所在。它是site.com/ask、site.com/forum和site.com/qa。有更好更简洁的方法吗?添加了对代码的修改。谢谢。更近了一步,但仍需要调整。这样,对site.com/forum的请求,例如,转到forum.site.com,这很好。但是对site.com/forum/how-to-do的请求会转到forum.site.com/404。如何调整它以使所有请求都转到forum.site.com?此代码将
site.com/forum/How-to
重定向到
forum.site.com/forum/How-to
。如果你想重定向到
forum.site.com
从上面的代码中删除
$request\u uri
部分。是的,成功了。谢谢您可以将其从代码中删除以显示正确答案。