提供由 PHP 生成的自定义 404 页面

提供由 PHP 生成的自定义 404 页面

以下是我的 php-fpm 配置:

location @site {
    fastcgi_pass   unix:/var/run/php5-fpm.sock;
    include fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME $document_root/index.php;

    fastcgi_intercept_errors on;
    error_page 404 /404;
}

因为fastcgi_intercept_errors启用了,当我的 PHP 路由器返回 404 时,Nginx 将重定向到/404好的

但由于是/404由我的 PHP 应用程序生成的,并且我的 PHP 应用程序正确设置了404响应代码,因此 Nginx 将尝试再次处理该错误!(这显然会以循环结束)

有针对这个的解决方法吗?

答案1

nginx 正在执行此操作,因为您告诉它这样做。

    fastcgi_intercept_errors on;

这意味着nginx 将不会提供 PHP 生成的错误响应,但让 nginx 来处理它们。这样你就陷入了无限循环。

要解决该问题,请删除此指令(默认为off)或将其明确设置为off

答案2

使生成错误页面的脚本返回 HTTP 200(即正确的页面),它应该立即起作用。

nginx 将检索 /404 的主体,并将响应状态更新为 404。

PS 作为奖励,您可能需要定义一个明确的位置(例如 location = /404 )并在那里打开 fastcgi_cache,这样每次需要显示错误页面时就不会查询您的 PHP 后端。

相关内容