我正在尝试创建一些自定义错误页面,但似乎无法让 500 页面正常工作。
我有以下配置:
server {
listen 80;
root /var/www/devsite;
index index.php;
server_name devsite;
error_page 403 = /error.php?code=403;
error_page 404 = /error.php?code=404;
error_page 500 = /error.php?code=500;
location / {
try_files $uri =404;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
起初我以为可能是因为它是一个PHP文件所以我改变了:
error_page 500 = /error.php?code=500;
到静态页面:
error_page 500 /500.html
但当我破坏一些 PHP 代码来触发它时,它仍然只显示一个带有 500 响应代码的空白页面。
然后我试图将其作为里面的最后一条规则location ~ \.php$
但同样的情况也会发生。有什么想法为什么自定义 500 页面不起作用吗?
我还注意到,如果您尝试访问具有 .php 扩展名的“访问被拒绝”文件,它将不会显示自定义 403 页面,而是显示内置页面。有没有办法让规则也覆盖 .php 文件?
你缺少的部分是fastcgi_intercept_errors指示。如果没有这个指令,Nginx 不会接触来自 CGI 后端的响应,只要它们有效:
确定代码大于或等于 300 的 FastCGI 服务器响应是否应传递到客户端或重定向到 nginx 以使用 error_page 指令进行处理。
您需要将以下内容放入 PHP 处理位置:
fastcgi_intercept_errors on;
顺便说一句,您可能不需要=
在你的错误页面线(取决于您的预期用途)。此语法指示 Nginx 使用从您指向的 PHP 脚本返回的响应代码,而不是原始响应代码:
如果错误响应由代理服务器或 FastCGI 服务器处理,并且服务器可能返回不同的响应代码(例如,200、302、401 或 404)...使用它返回的代码进行响应。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)