如何将特定位置重定向到不同域上的该位置?
How to redirect a specific location to that location on a different domain?
所以我在 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 $scheme://domain-a.com$request_uri;
}
这使得来自 domain-x.com
的一般重定向在一定程度上起作用。对于 location
我尝试了两种重定向方式:
location /info/ {
return 307 $scheme://domain-b.com/info;
}
和:
location /info/ {
proxy_pass http://domain-b.com/;
}
我也用 location = /info/
试过了,但没有用。
我 运行 遇到的问题是 domain-x.com/something
之类的任何 URL 都被重定向到 [IP]something
(IP 是 nginx 运行s),这也适用于 /info
,最终为 [IP]info
。当我输入 [IP]/info
时,重定向按预期工作。你能帮我解决我的问题吗?
根本问题是 server
块中的裸体 return 覆盖了同一级别的任何 location
块。
通过将默认 return
包装在默认 location
块中来保护默认 return
,以便正确评估所有位置块。例如:
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;
}
}
或者,在 return
前面使用 rewrite
,因为这些指令是按顺序计算的。例如:
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
作为前缀。
所以我在 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 $scheme://domain-a.com$request_uri;
}
这使得来自 domain-x.com
的一般重定向在一定程度上起作用。对于 location
我尝试了两种重定向方式:
location /info/ {
return 307 $scheme://domain-b.com/info;
}
和:
location /info/ {
proxy_pass http://domain-b.com/;
}
我也用 location = /info/
试过了,但没有用。
我 运行 遇到的问题是 domain-x.com/something
之类的任何 URL 都被重定向到 [IP]something
(IP 是 nginx 运行s),这也适用于 /info
,最终为 [IP]info
。当我输入 [IP]/info
时,重定向按预期工作。你能帮我解决我的问题吗?
根本问题是 server
块中的裸体 return 覆盖了同一级别的任何 location
块。
通过将默认 return
包装在默认 location
块中来保护默认 return
,以便正确评估所有位置块。例如:
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;
}
}
或者,在 return
前面使用 rewrite
,因为这些指令是按顺序计算的。例如:
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
作为前缀。