Estoy intentando llegar http://foo.mydomain.xyz/one/two/three.json
llamando 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.json
regresa http://foo.mydomain.xyz/cat/one/two/three.json
. Observe la/gatono se elimina de la URL. ¿Como puedo resolver esto?
Respuesta1
Su rewrite
declaración es cambiar el nombre de dominio pero nada más. El valor de $request_uri
es el URI original incluida la /cat
parte 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 location
directiva:
location / {
proxy_pass http://localhost:8080;
}
location ~ ^/cat(/.+)$ {
return 301 http://foo.example.com$1$is_args$args;
}