handle_errors
设置错误处理程序。
当正常的HTTP请求处理程序返回一个错误时,正常的处理会停止,错误处理程序会被调用。错误处理程序形成一个路由,就像正常的路由一样,它们可以做任何正常路由可以做的事情。这使得在处理HTTP请求期间的错误时有很大的控制力和灵活性。例如,你可以提供静态错误页面、模板化的错误页面,或者反向代理到另一个后端来处理错误。
请求的上下文将被带入错误路由,所以任何在请求上下文上设置的值,如site root或vars,也将被保留在错误处理程序中。此外,在处理错误时,新占位符是可用的。
请注意,某些指令,例如reverse_proxy
可能会写一个HTTP状态为错误的响应,将 不会 触发错误路由。
你可以使用error
指令,根据自己的路由决策明确地触发一个错误。
语法
handle_errors { <directives...> }
占位符
以下占位符在处理错误时可用。它们是Caddyfile速记的完整占位符,可以在HTTP服务器错误路由的JSON文档中找到。
占位符 | 描述 |
---|---|
{err.status_code} |
推荐的HTTP状态代码 |
{err.status_text} |
与推荐状态代码相关的状态文本 |
{err.message} |
错误信息 |
{err.trace} |
错误的来源 |
{err.id} |
该错误发生的标识符 |
示例
基于状态代码的自定义错误页面(例如,404错误的页面称为404.html
)。注意,当在handle_errors
中运行时,file_server
保留了错误的HTTP状态码(假设你事先在网站中设置了一个site root)。
handle_errors { rewrite * /{err.status_code}.html file_server }
一个单一的错误页面,使用templates
来定制一个自定义的错误信息。
handle_errors { rewrite * /error.html templates file_server }
反向代理到一个专业的服务器,该服务器在处理HTTP错误和改善你的心情方面有很高的水平😸:
``caddy-d
handle_errors { rewrite * /{err.status_code} reverse_proxy https://http.cat { header_up Host {upstream_hostport} } }
只需使用respond
即可返回错误代码和名称
handle_errors { respond "{err.status_code} {err.status_text}" }
要以不同的方式处理特定的错误代码,使用expression
匹配器,以及handle
进行互斥。
handle_errors { @404-410 expression `{err.status_code} in [404, 410]` handle @404-410 { respond "It's a 404 or 410 error!" } @5xx expression `{err.status_code} >= 500 && {err.status_code} < 600` handle @5xx { respond "It's a 5xx error." } handle { respond "It's another error" } }