【问题标题】:How to set up nested subfolder to subdomain Nginx 301 redirects如何设置嵌套子文件夹到子域 Nginx 301 重定向
【发布时间】:2023-03-21 00:09:01
【问题描述】:

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

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

但结果还是一样。有什么想法吗?

【问题讨论】:

  • 在你的评论中你提到了site.com/ask,但你的代码是site.com/~ask/。哪个是对的?
  • 也许这就是问题所在。它是 site.com/ask、site.com/forum 和 site.com/qa。有没有更好更简洁的方法?
  • 添加了对代码的修改。

标签: redirect nginx


【解决方案1】:

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

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/forum 的请求,例如,转到 forum.site.com,这很好。但是对 site.com/forum/how-to-do-this 的请求转到 forum.site.com/404。如何调整它以使所有请求都转到 forum.site.com?
  • 此代码将site.com/forum/how-to 重定向到forum.site.com/forum/how-to。如果您想重定向到forum.site.com,请从上面的代码中删除$request_uri 部分。
  • 是的,做到了。谢谢。您可以从代码中删除相同的内容以显示正确答案。
猜你喜欢
  • 1970-01-01
  • 2017-05-10
  • 2012-12-03
  • 2016-03-17
  • 2018-09-13
  • 1970-01-01
  • 2016-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多