2009-06-21 276 views
43

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

我如何定制这个404错误页面?

回答

33

您可以使用nginx config中的error_page属性。

例如,如果你打算到404错误页面设置为/404.html,使用

error_page 404 /404.html; 

500错误页面设置为/500.html是一样简单:

error_page 500 /500.html; 
+2

虽然链接是OK和答案微创作品,未经环节,它可以受益于更多的阐述。 – Paul 2015-08-10 00:38:50

+0

@Paul I 100%对此表示赞同,因此我在此答案中添加了一些代码示例;-) – 2015-10-18 14:32:56

101

你可以设置nginx.conf中每个位置块的自定义错误页面,或整个网站的全局错误页面。

重定向到一个简单的404页面未找到某个具体位置:

location /my_blog { 
    error_page 404 /blog_article_not_found.html; 
} 

站点宽404页:

server { 
    listen 80; 
    error_page 404 /website_page_not_found.html; 
    ... 

您可以附加标准错误代码在一起有一个单页对于几种类型的错误:

location /my_blog { 
    error_page 500 502 503 504 /server_error.html 
} 

要重定向到一个完全不同的服务器, g您必须在您的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; 
    } 

manual可以给你更多的细节,也可以搜索谷歌的条款nginx.conf和error_page在网络上的真实例子。

+1

您是否知道是否可以使用错误通配符?像`error_page 50 * = /error_50x.html;`? – 2012-11-27 01:58:23

+0

不允许使用通配符 - 此服务器命令的wiki页面在这里http://wiki.nginx.org/NginxHttpCoreModule#error_page - 也不是必需的,因为错误代码是由不改变的HTTP协议定义的常常。请参阅http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html或http://en.wikipedia.org/wiki/List_of_HTTP_status_codes查看完整列表,如果您认为那里有任何数字,我想可以添加任何数字将是未来需要的代码。 – 2012-11-27 17:17:49

27

“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; 
    } 

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

fastcgi_intercept_errors;

例如,

location ~ \.php { 
     #... 
     error_page 404 404.html; 
     fastcgi_intercept_errors on; 
    } 
14

不再推荐使用这些答案,因为try_files工作速度比在这方面if。只需在你的PHP所在地块添加try_files测试文件是否存在,否则返回一个404

location ~ \.php { 
    try_files $uri =404; 
    ... 
}