Nginx - 使用 PHP 文件处理 404、403、500 等错误

Nginx - 使用 PHP 文件处理 404、403、500 等错误

我希望在我的服务器上托管的各个网站中设置相同的错误页面。换句话说,每个server块都应具有相同的错误设置:

    error_page 404 403 /404.php;
    error_page 500 502 503 504 /50x.php;
    location = /404.php { root /home/main; allow all; }
    location = /50x.php { root /home/main; }

然后,我会在每个错误页面的 PHP 中检查$_REQUEST['HTTP_HOST']并显示相应的消息。这很好,而且易于管理所有网站的错误消息,而这方面的设计不需要做太多改变。

问题:此方法适用于没有任何特定扩展名的 HTML 文件和 URL。但如果不存在的 URL(即应产生 404 的 URL)包含 .file 扩展名,则该方法无效。

example.com/nonexistent-folder/ ---> 可行,显示 404.php 内容 example.com/nonexistent.gif ---> 不可行

第二个 URL 在 Chrome 中显示为 ERR_INVALID_RESPONSE。

CURL 标头检查可能会提供一些线索:

        curl -I https://example.com/nonexistent.gif
        HTTP/1.1 404 Not Found
        Server: nginx
        Date: Sat, 18 Feb 2017 18:19:48 GMT
        Content-Type: application/x-httpd-php
        Content-Length: 1840
        Connection: keep-alive

Content-type 是 PHP。这是个问题吗?对于不存在的 GIF 文件,Content-type 是否需要为 GIF?如果不是,那么ERR_INVALID_RESPONSE浏览器中是什么原因导致的?

相关内容