我想重写下面的网址没有重定向。
From:example.com/group/abc/
收件人:group.example.com/abc/
我仍然想保持在用户浏览器的网址example.com/group/abc/。
我已经尝试了下面的NGINX配置,但它并没有阻止它重定向,因为http或https。
如果替换字符串以“http://"、“https://"或“$scheme”开头,则处理停止,重定向返回到客户端。
server {
listen *:80;
server_name ~^(?<group>.*)\.example\.com$;
location / {
# Existing settings
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto http;
proxy_pass http://localhost:8090;
# My addition
if ($group = "") {
rewrite ^/([^/]+)/(.*)$ http://$1.$host/$2 break;
}
}
}
我也试过rewrite ^/([^/]+)/(.*)$ http://$1.$host/$2 last;
我错过了什么?
1条答案
按热度按时间nhaq1z211#
所以你在
localhost:8090
上有一个服务,它响应格式如下的请求://group.example.com/abc/
。反向代理还接收类似
//example.com/group/abc/
的请求,这些请求需要在向上游传递到localhost:8090
之前进行更改。1.我建议您使用两个
server
块,一个用于处理对example.com
的请求,另一个用于处理其他所有请求。localhost:8090
分两部分接收请求。重要的是,域名部分在proxy_set_header Host
值中传递给它。1.您不能使用
rewrite
更改域名(除非您使用它执行外部重定向),但您可以**使用rewrite
**更改URL * 在域名 * 之后的部分,然后将其发送到上游。举例来说:
请注意,我们使用
$1
中的rewrite
捕获$1
中的组名,但稍后在proxy_set_header Host
语句中使用它来重新创建子域名。在上面的示例中,使用了$1.$http_host
,但$1.example.com
也可以工作。