Nginx redirige a otro dominio sin uri final

Nginx redirige a otro dominio sin uri final

Estoy intentando llegar http://foo.mydomain.xyz/one/two/three.jsonllamando http://bar.mydomain.xyz/cat/one/two/three.json. Estoy usando la siguiente configuración:

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 configuración cuando llamo: http://bar.mydomain.xyz/cat/me está redirigiendo http://foo.mydomain.xyz/exitosamente. Pero cuando llamo, http://bar.mydomain.xyz/cat/one/two/three.jsonregresa http://foo.mydomain.xyz/cat/one/two/three.json. Observe la/gatono se elimina de la URL. ¿Como puedo resolver esto?

Respuesta1

Su rewritedeclaración es cambiar el nombre de dominio pero nada más. El valor de $request_uries el URI original incluida la /catparte inicial. Debe capturar la última parte del URI en la expresión regular.

Por ejemplo:

rewrite ^/cat/(.*)$ http://foo.example.com/$1 permanent;

O tal vez:

rewrite ^/cat(?:/(.*))?$ http://foo.example.com/$1 permanent;

Respuesta2

Otro enfoque es capturar la parte en la locationdirectiva:

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

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

información relacionada