Nginx redireciona para outro domínio sem uri à direita

Nginx redireciona para outro domínio sem uri à direita

Estou tentando http://foo.mydomain.xyz/one/two/three.jsonligar 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.jsonele 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 rewritedeclaração está alterando o nome de domínio, mas nada mais. O valor de $request_urié o URI original incluindo a /catparte 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 locationdiretiva:

location / {
    proxy_pass http://localhost:8080;
}

location ~ ^/cat(/.+)$ {
    return 301 http://foo.example.com$1$is_args$args;
}

informação relacionada