Ich versuche, http://foo.mydomain.xyz/one/two/three.json
durch den Anruf zu kommen http://bar.mydomain.xyz/cat/one/two/three.json
. Ich verwende die folgende Konfiguration:
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;
}
}
Wenn ich diese Konfiguration verwende, http://bar.mydomain.xyz/cat/
werde ich http://foo.mydomain.xyz/
erfolgreich zu weitergeleitet. Aber wenn ich anrufe, http://bar.mydomain.xyz/cat/one/two/three.json
wird zurückgegeben http://foo.mydomain.xyz/cat/one/two/three.json
. Beachten Sie die/Katzewird nicht aus der URL entfernt. Wie kann ich das lösen?
Antwort1
Ihre rewrite
Anweisung ändert den Domänennamen, sonst aber nichts. Der Wert $request_uri
ist die ursprüngliche URI einschließlich des führenden /cat
Teils. Sie müssen den letzten Teil der URI im regulären Ausdruck erfassen.
Zum Beispiel:
rewrite ^/cat/(.*)$ http://foo.example.com/$1 permanent;
Oder vielleicht:
rewrite ^/cat(?:/(.*))?$ http://foo.example.com/$1 permanent;
Antwort2
location
Ein anderer Ansatz besteht darin, den Teil in der Direktive zu erfassen :
location / {
proxy_pass http://localhost:8080;
}
location ~ ^/cat(/.+)$ {
return 301 http://foo.example.com$1$is_args$args;
}