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

时间:2014-03-24 10:41:58

标签: redirect nginx

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

因此,例如,我希望将 ANY 请求重定向到site.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;
            }
    }

但结果仍然相同。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

实际上,无论用户访问哪个页面,您都希望将用户重定向到论坛的主页面。试试这个。

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

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

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