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