如何在 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;
}
如果 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;
}