Nginx永久重定向到特定子目录的不同网址

问题描述:

我有2个Nginx服务器提供来自未知父域的2个不同子域的静态文件,比如说<env>.foo.<domain>.com<env>.bar.<domain>.comNginx永久重定向到特定子目录的不同网址

我想配置nginx的服务器<env>.foo.<domain>.com因此,如果URL的子目录catdog我想重定向到<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的技能是不能令人信服......

+0

'dev.foo.mydomain2.com'和'dev.foo.mydomain1.com'在相同的nginx或不同的nginx上处理?也做这些听相同的服务器块或不同的服务器块? –

+0

同nginx,但部署到不同的环境。例如。 staging.foo.domain1.com,demo.foo.domain2.com – harryg

+0

'foo'和'bar'子域位于完全独立的nginx框中 – harryg

你能做低于

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; 
} 
+0

如果我不知道'server_name'与配置中的配置相同到多个环境?即它应该工作,不管域名和动态使用请求中的域名部分,除了'foo' /'bar'部分替换为 – harryg

+0

@harryg, –