Nginx
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
。注意**/cat**沒有從 url 中刪除。我該如何解決這個問題?
您的
rewrite
聲明正在更改域名,但沒有其他任何內容。的值$request_uri
是包括前導/cat
部分的原始 URI。您需要在正則表達式中擷取 URI 的後半部分。例如:
rewrite ^/cat/(.*)$ http://foo.example.com/$1 permanent;
或許:
rewrite ^/cat(?:/(.*))?$ http://foo.example.com/$1 permanent;
另一種方法是擷取
location
指令中的部分:location / { proxy_pass http://localhost:8080; } location ~ ^/cat(/.+)$ { return 301 http://foo.example.com$1$is_args$args; }