handle
在同一嵌套级别的其他 handle
块中,互斥地评估一组指令。
换句话说,当多个 handle
指令按顺序出现时,只会评估第一个匹配的 handle
块。没有匹配器的 handle 充当回退路由。
handle
指令根据其匹配器按 指令排序算法 排序。handle_path
指令是一个特殊情况,它与具有路径匹配器的 handle
具有相同的优先级。
如果需要,可以嵌套 handle 块。只有 HTTP 处理程序指令可以在 handle 块内使用。
语法
handle [<matcher>] {
<directives...>
}
- <directives...> 是 HTTP 处理程序指令或指令块的列表,每行一个,就像在 handle 块之外使用一样。
类似指令
还有其他指令可以包装 HTTP 处理程序指令,但每个指令都有其用途,具体取决于您想要传达的行为
-
handle_path
与handle
相同,但它会在运行其处理程序之前从请求中剥离前缀。 -
handle_errors
类似于handle
,但仅在 Caddy 在请求处理期间遇到错误时才会调用。 -
route
像handle
一样包装其他指令,但有两个区别- 路由块彼此之间不是互斥的,
- 路由内的指令不会 重新排序,如果需要,可以提供更多控制。
示例
使用静态文件服务器处理 /foo/
中的请求,使用反向代理处理其他请求
example.com {
handle /foo/* {
file_server
}
handle {
reverse_proxy 127.0.0.1:8080
}
}
您可以在同一个站点中混合使用 handle
和 handle_path
,它们仍然彼此互斥
example.com {
handle_path /foo/* {
# The path has the "/foo" prefix stripped
}
handle /bar/* {
# The path still retains "/bar"
}
}
您可以嵌套 handle
块以创建更复杂的路由逻辑
example.com {
handle /foo* {
handle /foo/bar* {
# This block only matches paths under /foo/bar
}
handle {
# This block matches everything else under /foo/
}
}
handle {
# This block matches everything else (acts as a fallback)
}
}