如何在 nginx 中有条件地显示错误页面?

How can I conditionally display an error page in nginx?

如果 URI 不包含 ajax 但如果包含 ajax,我如何将 nginx 配置为 return 和 error_page 不发送错误页面只是 return 回应?类似下面的内容,但我不知道如何访问 $status。我想对 4xx 或 5xx

的所有状态执行此操作

本质上,我希望能够在出现 AJAX 请求错误时收到 JSON 响应,并在请求呈现失败时收到错误页面 HTML

# If the location contains ajax
location ~ ajax {
    # Return the error status code
    return $status;
}
# Location did not contain ajax so send an error page
error_page $status error.html;

谢谢!

原来我在考虑 nginx 指令时出错了。我把它想成一种编程语言,好像 non-ajax 响应的 error_page 会在包含 ajax 的 URI 之前被评估。相反,将使用在与正则表达式匹配的 URI 的位置块中定义的 error_page 指令。这最终完美地工作了。

# All pages error page
error_page 404 400 401 402 403 405 406 407 408 409 410 411 412 413 414 415 416 417 500 501 502 503 504 505 error.html;

location ~ ajax {
    # Error page for URI containing ajax
    error_page 500 501 502 503 504 505 error.html;
}