我有两个Nginx服务器提供来自未知父域的两个不同子域的静态文件,比如说<env>.foo.<domain>.com和<env>.bar.<domain>.com。
我希望为<env>.foo.<domain>.com配置nginx服务器,以便如果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>部分是动态的,这取决于部署服务器的环境,但在两个nginx盒之间是常见的。
我想象它是这样的:
server {
location ??? /(cat|dog) {
return 301 $scheme://???/$1$is_args$query_string;
}
}但是我的nginx技能还不是很好。
发布于 2017-09-27 21:04:25
下面是你能做的
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:动态主机名处理
您可以动态地处理主机名,也可以动态处理用户re模式和组。
map $hostsname $host_to_send_to {
default $http_host;
~(.*).foo.mydomain1.com $1.bar.mydomain1.com;
~(.*).foo.mydomain2.com $1.bar.mydomain2.com;
}https://stackoverflow.com/questions/46444055
复制相似问题