Nginx - 自定义404页面

tho*_*s55 51 php nginx http-status-code-404

Nginx + PHP(在fastCGI上)对我很有用.当我输入一个不存在的PHP文件的路径时,而不是获取默认的404错误页面(对于任何无效的.html文件来说),我只是得到一个"没有指定输入文件.".

如何自定义此404错误页面?

Gre*_*tle 109

您可以为nginx.conf中的每个位置块设置自定义错误页面,也可以为整个站点设置全局错误页面.

要重定向到特定位置的简单404未找到页面:

location /my_blog {
    error_page    404 /blog_article_not_found.html;
}
Run Code Online (Sandbox Code Playgroud)

网站范围404页面:

server {
    listen 80;
    error_page  404  /website_page_not_found.html;
    ...
Run Code Online (Sandbox Code Playgroud)

您可以将标准错误代码附加在一起,以便为多种类型的错误提供单个页面:

location /my_blog {
    error_page 500 502 503 504 /server_error.html
}
Run Code Online (Sandbox Code Playgroud)

要重定向到完全不同的服务器,假设您的http部分中定义了名为server2的上游服务器:

upstream server2 {
    server 10.0.0.1:80;
}
server {
    location /my_blog {
        error_page    404 @try_server2;
    }
    location @try_server2 {
        proxy_pass http://server2;
    }
Run Code Online (Sandbox Code Playgroud)

手册可以为您提供更多详细信息,或者您可以在Google上搜索nginx.conf和error_page这些术语,以获取网络上的真实示例.

  • 您知道是否可以使用错误通配符吗?类似于`error_page 50* = /error_50x.html;`? (2认同)

Wiz*_*Kid 40

您在nginx 配置中使用error_page属性.

例如,如果您打算将404错误页面设置为/404.html,请使用

error_page 404 /404.html;
Run Code Online (Sandbox Code Playgroud)

将500错误页面设置/500.html为就像以下一样简单:

error_page 500 /500.html;
Run Code Online (Sandbox Code Playgroud)

  • 虽然链接没问题且答案在没有链接的情况下最低限度地工作,但它可以从额外的细化中受益. (2认同)

dhr*_*r_p 32

小心语法!大乌龟可以互换使用它们,但是:

error_page 404 = /404.html;

将返回状态代码为200的404.html页面(因为=已将其转发到此页面)

error_page 404 /404.html;

将返回带有(原始)404错误代码的404.html页面.

https://serverfault.com/questions/295789/nginx-return-correct-headers-with-custom-error-documents

  • 2年后,我纠正了我的代码.谢谢dhr_p.:) (2认同)

Gri*_*nov 28

"error_page"参数不够用.

最简单的解决方案是

     server{
         root /var/www/html;
         location ~ \.php {
            if (!-f $document_root/$fastcgi_script_name){
                return 404;
            }
            fastcgi_pass   127.0.0.1:9000;
            include fastcgi_params.default;
            fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;
        }

Run Code Online (Sandbox Code Playgroud)

顺便说一下,如果你想让Nginx处理PHP脚本返回的404状态,你需要添加

fastcgi_intercept_errors on;

例如

     location ~ \.php {
            #...
            error_page  404   404.html;
            fastcgi_intercept_errors on;
         }
Run Code Online (Sandbox Code Playgroud)


Isi*_*ius 14

不再推荐这些答案,因为try_filesif这种情况更快.只需添加try_files您的php位置块以测试文件是否存在,否则返回404.

location ~ \.php {
    try_files $uri =404;
    ...
}
Run Code Online (Sandbox Code Playgroud)