Nginx

Nginx 重定向到另一個域而沒有尾隨 uri

  • August 20, 2021

我試圖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;
}

引用自:https://serverfault.com/questions/1073869