Nginx

Nginx:在保留路徑的同時重寫

  • May 31, 2021

我想設置一個臨時重定向到另一個域,但我想保持路徑非常相似。

這是一個例子:

請求網址:https://api.mydomain.com/uploads/default/logo.png

重寫的 URL 應該是:https://cdn.mydomain.com/default/logo.png

我已經設置了這樣的規則,但它不起作用:

{

   server api.mydomain.com

   location /uploads/(.*)$ {
          rewrite ^ $scheme://cdn.mydomain.com/$1 redirect;
   }

}

一些解釋為什麼您的重寫解決方案不起作用。rewrite指令將其第一個參數視為正則表達式。您正在使用^as 正則表達式(匹配任何字元串的一種非常常見的方法),並且在正則表達式匹配$1變數之後有一個空值,因為^正則表達式模式沒有任何擷取組。因此,以前的$1變數值失去了。相反的return指令不將任何參數視為正則表達式,並且$1變數值不會被改變。

你能做些什麼來防止$1變數價值的損失?以下是另外兩種可能的解決方案:

{

   server api.mydomain.com

   location /uploads/(?<suffix>.*) {
       rewrite ^ $scheme://cdn.mydomain.com/$suffix redirect;
   }

   ...

}
  • rewrite在上下文中使用指令server而不是location一個:
{

   server api.mydomain.com

   rewrite ^/uploads/(.*) $scheme://cdn.mydomain.com/$1 redirect;

   ...

}

有時使用數字擷取組會導致難以跟踪的錯誤,例如,請參閱問題/答案。

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