我有2台Nginx服务器提供来自未知父域的2个不同子域的静态文件,比方说<env>.foo.<domain>.com
和<env>.bar.<domain>.com
。
我想为<env>.foo.<domain>.com
配置nginx服务器,以便如果网址包含子目录cat
或dog
,我想重定向到<env>.bar.<domain>.com/<subdirectory>/<rest of url>
。
E.g。
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 :(得分:3)
{{1}}
有关详细信息,请参阅digital oceans's article“如何使用Nginx创建临时和永久重定向”。
答案 1 :(得分: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;
}