Nginx는 URI를 따르지 않고 다른 도메인으로 리디렉션합니다.

Nginx는 URI를 따르지 않고 다른 도메인으로 리디렉션합니다.

http://foo.mydomain.xyz/one/two/three.json전화해서 받으려고 합니다 http://bar.mydomain.xyz/cat/one/two/three.json. 다음 구성을 사용하고 있습니다.

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;
        }
}

전화할 때 이 구성을 사용하면 성공적 http://bar.mydomain.xyz/cat/으로 리디렉션됩니다 http://foo.mydomain.xyz/. 하지만 내가 전화하면 http://bar.mydomain.xyz/cat/one/two/three.json돌아옵니다 http://foo.mydomain.xyz/cat/one/two/three.json. 주목하세요/고양이URL에서 제거되지 않습니다. 이 문제를 어떻게 해결할 수 있나요?

답변1

귀하의 rewrite진술은 도메인 이름을 변경하는 것 외에는 아무것도 변경하지 않습니다. 값은 $request_uri앞부분을 포함한 원본 URI입니다 /cat. 정규식에서 URI의 뒷부분을 캡처해야 합니다.

예를 들어:

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

아니면:

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

답변2

또 다른 접근 방식은 지시문의 일부를 캡처하는 것입니다 location.

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

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

관련 정보