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

如果 URI 不包含 ajax 但如果它包含 ajax 则如何配置 nginx 以返回 error_page 不发送错误页面而只返回响应?类似于以下内容,但我不知道如何访问 $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;

谢谢!

回答1

事实证明我在考虑 nginx 指令错误。我把它想象成一种编程语言,就好像非 ajax 响应的 error_page 将在包含 ajax 的 URI 之前进行评估。相反,将使用在 location 块中为匹配正则表达式的 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;
}

相似文章