NGINX - 将某些路由重定向到子域
NGINX - Redirecting certain routes to a subdomain
我创建了一个项目,我有:
my-project.com
展示我的 Angular 8 App
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 根据服务器配置中定义的 location
块选择请求 URI 处理规则。关于这个指令的官方文档是 here, and here 是一些额外的解释。您可以使用两个前缀位置实现所需的行为:
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 正则表达式语法,除了你不应该为正则表达式模式使用分隔符(匹配使用 ~
(区分大小写的匹配)指定的正则表达式,~*
(不区分大小写的匹配)或 !~
/!~*
(case-sensitive/case-insensitive 非匹配)运算符)。此外,您不需要在 /
字符前加上反斜杠(尽管您仍然可以这样做,但它不会改变正则表达式模式的含义)。
我创建了一个项目,我有:
my-project.com
展示我的 Angular 8 Appapi.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 根据服务器配置中定义的 location
块选择请求 URI 处理规则。关于这个指令的官方文档是 here, and here 是一些额外的解释。您可以使用两个前缀位置实现所需的行为:
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 正则表达式语法,除了你不应该为正则表达式模式使用分隔符(匹配使用 ~
(区分大小写的匹配)指定的正则表达式,~*
(不区分大小写的匹配)或 !~
/!~*
(case-sensitive/case-insensitive 非匹配)运算符)。此外,您不需要在 /
字符前加上反斜杠(尽管您仍然可以这样做,但它不会改变正则表达式模式的含义)。