Nginx
Nginx:在保留路徑的同時重寫
我想設置一個臨時重定向到另一個域,但我想保持路徑非常相似。
這是一個例子:
請求網址:
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
變數價值的損失?以下是另外兩種可能的解決方案:
- 在指令 中使用命名的擷取組:
location
{ 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; ... }
有時使用數字擷取組會導致難以跟踪的錯誤,例如,請參閱此問題/答案。