2017-09-27 62 views
0

我有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

回答

0

你能做低於

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, –

相關問題