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