【问题标题】:NGINX - Redirecting certain routes to a subdomainNGINX - 将某些路由重定向到子域
【发布时间】:2020-10-27 09:04:15
【问题描述】:

我创建了一个项目,我有:

  1. my-project.com 展示我的 Angular 8 应用程序
  2. api.my-project.com 访问我的 Symfony 5 API

我在我的 Angular 应用程序上构建了一个非常基本的登录页面,但现在,我改变了主意,我想将我的 Angular 应用程序放入 app.my-project.com 并保留 my-project.com 以显示一个漂亮的登录页面。

问题是有一些客户端已经在使用主域上的服务,并且该请求应该被重定向到app.my-project.com子域。

应该是这样的:

my-project.com/login -> app.my-project.com/login

my-project.com/pm-something -> app.my-project.com/pm-something

这是我需要的伪代码:

if( url.includes('login') or url.includes('pm-') ) {
    redirectTo(app.my-project.com)
}

我认为最简单的方法是在我的 NGINX 配置文件中重写路由,但我不确定正确的方法。

提前致谢。

【问题讨论】:

    标签: nginx url-rewriting subdomain


    【解决方案1】:

    NGINX 根据服务器配置中定义的 location 块选择请求 URI 处理规则。这个指令的官方文档是herehere是一些额外的解释。您可以使用两个前缀位置来实现所需的行为:

    location /login {
        return 301 $scheme://app.my-project.com$request_uri;
    }
    location /pm- {
        return 301 $scheme://app.my-project.com$request_uri;
    }
    

    这两个前缀位置可以替换为单个正则表达式匹配位置:

    location ~ ^/(login|pm-) {
        return 301 $scheme://app.my-project.com$request_uri;
    }
    

    NGINX 使用系统 PCRE 库和通用 PCRE 正则表达式语法,除非您不应该为正则表达式模式使用分隔符(匹配使用 ~(区分大小写匹配)、~*(不区分大小写匹配)指定的正则表达式) 或!~/!~*(区分大小写/不区分大小写的非匹配)运算符)。此外,您不需要在 / 字符前加上反斜杠(尽管您仍然可以这样做,但它不会改变正则表达式模式的含义)。

    【讨论】:

    • 如果您解释了您提供的代码如何回答问题,这将是一个更好的答案。
    • 您好,Ivan,它成功了!您能否就它的工作原理添加一些解释?正如@pppery 所说,它会很棒。谢谢!
    • @IsaacBosca 添加了一些解释。
    猜你喜欢
    • 2016-03-21
    • 2020-02-29
    • 2011-03-02
    • 2018-10-22
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 2016-05-26
    相关资源
    最近更新 更多