Estou tentando http://foo.mydomain.xyz/one/two/three.json
ligar http://bar.mydomain.xyz/cat/one/two/three.json
. Estou usando a seguinte configuração:
server {
listen 80;
listen [::]:80;
server_name bar.mydomain.xyz;
absolute_redirect off;
location / {
proxy_pass http://localhost:8080;
}
location /cat {
rewrite ^(/cat) http://foo.mydomain.xyz$request_uri permanent;
}
}
server {
listen 80;
listen [::]:80;
server_name foo.mydomain.xyz;
location / {
proxy_pass http://localhost:7070;
}
}
Usando esta configuração quando estou ligando: http://bar.mydomain.xyz/cat/
ela está me redirecionando para http://foo.mydomain.xyz/
sucesso. Mas quando estou ligando http://bar.mydomain.xyz/cat/one/two/three.json
ele está retornando http://foo.mydomain.xyz/cat/one/two/three.json
. Observe o/gatonão está removendo do URL. Como posso resolver isso?
Responder1
Sua rewrite
declaração está alterando o nome de domínio, mas nada mais. O valor de $request_uri
é o URI original incluindo a /cat
parte inicial. Você precisa capturar a última parte do URI na expressão regular.
Por exemplo:
rewrite ^/cat/(.*)$ http://foo.example.com/$1 permanent;
Ou talvez:
rewrite ^/cat(?:/(.*))?$ http://foo.example.com/$1 permanent;
Responder2
Outra abordagem é capturar a parte da location
diretiva:
location / {
proxy_pass http://localhost:8080;
}
location ~ ^/cat(/.+)$ {
return 301 http://foo.example.com$1$is_args$args;
}