重寫
在內部重寫請求 URI。
重寫會變更部分或全部的請求 URI。請注意,URI 不包含 scheme 或權限(主機和埠),且客戶端通常不會傳送片段。因此,此指令主要用於路徑和查詢字串操作。
rewrite
指令暗示接受請求的意圖,但會進行修改。
它與同一個區塊中的其他 rewrite
指令互斥,因此可以定義會相互串聯的重寫,因為只會執行第一個符合的重寫。
在 rewrite
之前符合請求的 請求比對器,可能不符合 rewrite
之後的同一個請求。如果您希望 rewrite
與其他處理常式共用路由,請使用 route
或 handle
指令。
語法
rewrite [<matcher>] <to>
- <to> 是用來重寫請求的 URI。只有重寫中指定的 URI 組成部分(路徑或查詢字串)會進行操作。URI 路徑是出現在
?
之前的任何子字串。如果省略?
,則整個代碼都會被視為路徑。
類似的指令
還有其他指令可以執行重寫,但暗示不同的意圖或在不完全替換 URI 的情況下執行重寫
範例
將所有請求重寫為 index.html
,保持任何查詢字串不變
example.com {
rewrite * /index.html
}
在所有請求前面加上 /api
,保留 URI 的其餘部分,然後反向代理到應用程式
api.example.com {
rewrite * /api{uri}
reverse_proxy localhost:8080
}
將 API 請求上的查詢字串替換為 a=b
,保持路徑不變
example.com {
rewrite * ?a=b
}
僅針對 /api/
的請求,保留現有的查詢字串並新增一個鍵值對
example.com {
rewrite /api/* ?{query}&a=b
}
變更路徑和查詢字串,同時保留原始查詢字串,並將原始路徑新增為 p
參數
example.com {
rewrite * /index.php?{query}&p={path}
}