文件
一個 項目

重寫

在內部重寫請求 URI。

重寫會變更部分或全部的請求 URI。請注意,URI 不包含 scheme 或權限(主機和埠),且客戶端通常不會傳送片段。因此,此指令主要用於路徑查詢字串操作。

rewrite 指令暗示接受請求的意圖,但會進行修改。

它與同一個區塊中的其他 rewrite 指令互斥,因此可以定義會相互串聯的重寫,因為只會執行第一個符合的重寫。

rewrite 之前符合請求的 請求比對器,可能不符合 rewrite 之後的同一個請求。如果您希望 rewrite 與其他處理常式共用路由,請使用 routehandle 指令。

語法

rewrite [<matcher>] <to>
  • <to> 是用來重寫請求的 URI。只有重寫中指定的 URI 組成部分(路徑或查詢字串)會進行操作。URI 路徑是出現在 ? 之前的任何子字串。如果省略 ?,則整個代碼都會被視為路徑。

類似的指令

還有其他指令可以執行重寫,但暗示不同的意圖或在不完全替換 URI 的情況下執行重寫

  • uri 處理 URI(移除字首、字尾或子字串替換)。

  • try_files 根據檔案的存在重寫請求。

範例

將所有請求重寫為 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}
}