Redirect 如何将特定位置重定向到其他域上的该位置?
因此,我在nginx中定义了一个虚拟主机,它应该重定向到两个不同的域。任何使用Redirect 如何将特定位置重定向到其他域上的该位置?,redirect,nginx,nginx-location,Redirect,Nginx,Nginx Location,因此,我在nginx中定义了一个虚拟主机,它应该重定向到两个不同的域。任何使用domain-x.com的URL都应该重定向到domain-a.com,但是domain-x.com/info确实应该重定向到domain-b.com/info。我试过两种不同的方法 通常我的条目如下所示: server { listen 80; server_name domain-x.com www.domain-x.com; location ... return 307 $s
domain-x.com
的URL都应该重定向到domain-a.com
,但是domain-x.com/info
确实应该重定向到domain-b.com/info
。我试过两种不同的方法
通常我的条目如下所示:
server {
listen 80;
server_name domain-x.com www.domain-x.com;
location ...
return 307 $scheme://domain-a.com$request_uri;
}
这使得domain-x.com
的常规重定向在某种程度上起作用。对于位置
我尝试了两种重定向方式:
location /info/ {
return 307 $scheme://domain-b.com/info;
}
以及:
我还尝试了location=/info/
,但没有成功
我遇到的问题是,任何像
domain-x.com/something
这样的URL都会被重定向到[IP]something
(IP是nginx运行的服务器的地址),这也适用于/info
,最终成为[IP]info
。当我输入[IP]/info
时,重定向按预期工作。你能帮我解决我的问题吗?基本问题是服务器
块中的裸返回覆盖了同一级别的任何位置
块
通过将默认返回值
包装在默认位置
块中来保护它,以便正确计算所有位置块。例如:
server {
listen 80;
server_name domain-x.com www.domain-x.com;
location / {
return 307 $scheme://domain-a.com$request_uri;
}
location = /info {
return 307 $scheme://domain-b.com/info;
}
}
server {
listen 80;
server_name domain-x.com www.domain-x.com;
rewrite ^/info$ $scheme://domain-b.com/info redirect;
return 307 $scheme://domain-a.com$request_uri;
}
或者,在返回
前面使用重写
,因为这些指令是按顺序计算的。例如:
server {
listen 80;
server_name domain-x.com www.domain-x.com;
location / {
return 307 $scheme://domain-a.com$request_uri;
}
location = /info {
return 307 $scheme://domain-b.com/info;
}
}
server {
listen 80;
server_name domain-x.com www.domain-x.com;
rewrite ^/info$ $scheme://domain-b.com/info redirect;
return 307 $scheme://domain-a.com$request_uri;
}
当然,第二个示例使用302响应,而不是期望的307响应
在这两个示例中,我都假设/info
URI完全匹配,但都很容易修改为接受/info
作为前缀
有关更多详细信息,请参阅和 我尝试了你的两种解决方案,结果都是一样的:
[IP]info/
这次在末尾加了一个斜杠。虽然我禁用了所有其他虚拟主机,但我开始怀疑是否有其他设置干扰。我建议您尝试使用浏览器插件/工具来分析HTTP响应中的位置
标头,并准确确定哪个服务器返回的是IP地址而不是域名。应该使用curl
早期的。。。您正确地怀疑是目标服务器造成了问题。