文档
a 项目

重写

在内部重写请求 URI。

重写更改请求 URI 的一部分或全部。请注意,URI 不包括方案或授权(主机和端口),客户端通常不发送片段。因此,此指令主要用于路径查询字符串操作。

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
}

a=b 替换 API 请求上的查询字符串,保留路径不变

example.com {
	rewrite * ?a=b
}

仅对于对 /api/ 的请求,保留现有的查询字符串并添加一个键值对

example.com {
	rewrite /api/* ?{query}&a=b
}

更改路径和查询字符串,保留原始查询字符串,同时将原始路径添加为 p 参数

example.com {
	rewrite * /index.php?{query}&p={path}
}