我想处理 2 个案例:test.example.com
和 test.example.com/ABC
。
如果输入的 url 是基域 (
test.example.com
),我想proxy_pass
一个给定的端点(比方说example .com/home
).如果给出
test.example.com/ABC
,我想proxy_pass
到example.com/confirm/ABC
- test.example.com = https://example.com/home
- test.example.com/ABC = https://example.com/confirm/ABC
我让 (1) 像这样工作:
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name test.example.com;
location / {
proxy_pass https://example.com/home;
}
}
但我不知道如何说“如果 $request_uri 存在,proxy_pass 到不同的端点”。我试过:
location / {
if ($request_uri) {
proxy_pass https://example.com/confirm/$request_uri;
}
proxy_pass https://example.com/home;
}
我怎样才能做到这一点?
最佳答案
$request_uri
始终存在并且永远不会为空。域根的 URI 是单个 /
(即使它没有显示在浏览器的地址栏中)。
与该 URI 匹配的 location
block 是 location =/
。参见 this document了解详情。
例如:
location = / {
proxy_pass https://example.com/home;
}
location / {
proxy_pass https://example.com/confirm/;
}
第一个 location
block 只匹配根 URI /
,第二个 location
block 匹配任何其他 URI。 URI 的其余部分自动附加到 /confirm/
。参见 this document了解详情。
关于Nginx - 如果 $request_uri 存在 proxy_pass 一个 url,否则另一个 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63178511/