Nginx永久重定向到特定子目录的不同网址
我有2个Nginx服务器提供来自未知父域的2个不同子域的静态文件,比如说<env>.foo.<domain>.com
和<env>.bar.<domain>.com
。Nginx永久重定向到特定子目录的不同网址
我想配置nginx的服务器<env>.foo.<domain>.com
因此,如果URL的子目录cat
或dog
我想重定向到<env>.bar.<domain>.com/<subdirectory>/<rest of url>
。
例如
http://dev.foo.mydomain1.com/cat/22 -> http://dev.bar.mydomain1.com/cat/22
http://dev.foo.mydomain1.com/dog/22 -> http://dev.bar.mydomain2.com/dog/22
http://dev.foo.mydomain2.com/dog/22 -> http://dev.bar.mydomain2.com/dog/22
http://dev.foo.mydomain1.com/bird/22 -> [no redirect]
域的<env>
和<domain>
部分是动态的根据向所述服务器部署环境,但是2个nginx的框之间常见的。
我想它是这样的:
server {
location ??? /(cat|dog) {
return 301 $scheme://???/$1$is_args$query_string;
}
}
但我的nginx的技能是不能令人信服......
你能做低于
http {
map $http_host $host_to_send_to {
default $http_host;
dev.foo.mydomain1.com dev.bar.mydomain1.com;
dev.foo.mydomain2.com dev.bar.mydomain2.com;
}
server {
server_name dev.foo.mydomain1.com;
location /(cat|dog) {
return 301 $scheme://$host_to_send_to$request_uri$is_args$query_string;
}
}
}
您需要将其添加到需要处理重定向的每个服务器块。
编辑-1:动态主机名处理
可以处理主机名的动态也用户重新图案和组
map $hostsname $host_to_send_to {
default $http_host;
~(.*).foo.mydomain1.com $1.bar.mydomain1.com;
~(.*).foo.mydomain2.com $1.bar.mydomain2.com;
}
如果我不知道'server_name'与配置中的配置相同到多个环境?即它应该工作,不管域名和动态使用请求中的域名部分,除了'foo' /'bar'部分替换为 – harryg
@harryg, –
'dev.foo.mydomain2.com'和'dev.foo.mydomain1.com'在相同的nginx或不同的nginx上处理?也做这些听相同的服务器块或不同的服务器块? –
同nginx,但部署到不同的环境。例如。 staging.foo.domain1.com,demo.foo.domain2.com – harryg
'foo'和'bar'子域位于完全独立的nginx框中 – harryg