Nginx – 自定义404页面
Nginx + PHP(在fastCGI上)非常适合我。 当我input一个不存在的PHP文件的path,而不是获得默认的404错误页面(对于任何无效的.html文件),我只是得到一个“没有指定input文件”。
我怎样才能定制这个404错误页面?
您在nginx configuration中使用error_page属性。
例如,如果您打算将404错误页面设置为/404.html
,请使用
error_page 404 /404.html;
将500错误页面设置为/500.html
就像下面这样简单:
error_page 500 /500.html;
您可以为nginx.conf中的每个位置块设置一个自定义错误页面,或为整个站点设置一个全局错误页面。
redirect到一个简单的404找不到特定位置的页面:
location /my_blog { error_page 404 /blog_article_not_found.html; }
全站404页面:
server { listen 80; error_page 404 /website_page_not_found.html; ...
您可以将标准的错误代码附加在一起,以为单个页面提供几种types的错误:
location /my_blog { error_page 500 502 503 504 /server_error.html }
要redirect到一个完全不同的服务器,假设你在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; }
该手册可以给你更多的细节,或者你可以在网上search谷歌的nginx.conf和error_page的真实生活的例子。
“error_page”参数是不够的。
最简单的解决scheme是
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 on;
例如
location ~ \.php { #... error_page 404 404.html; fastcgi_intercept_errors on; }
小心语法! 大乌龟交替使用它们,但是:
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
这些答案不再被推荐,因为try_files
工作得比在这种情况下更快。 只需添加try_files
在您的PHP位置块来testing文件是否存在,否则返回404。
location ~ \.php { try_files $uri =404; ... }