Nginx + PHP(在fastCGI上)对我很有用。当我输入一个不存在的PHP文件的路径时,而不是获取默认的404错误页面(对于任何无效的.html文件来说),我只是得到一个“没有指定输入文件。”。
如何自定义此404错误页面?
答案 0 :(得分:106)
您可以为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
}
要重定向到完全不同的服务器,假设您的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可以为您提供更多详细信息,或者您可以在Google上搜索网页上的nginx.conf和error_page这两个网站上的真实示例。
答案 1 :(得分:38)
您使用nginx config中的error_page属性。
例如,如果您打算将404错误页面设置为/404.html
,请使用
error_page 404 /404.html;
将500错误页面设置为/500.html
就像以下一样简单:
error_page 500 /500.html;
答案 2 :(得分:29)
小心语法!大乌龟互换使用它们,但是:
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
答案 3 :(得分:28)
“error_page”参数进行重定向,将请求方法转换为“GET”,它不是自定义响应页面。
最简单的解决方案是
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][1] on;
E.g。
location ~ \.php {
#...
error_page 404 404.html;
fastcgi_intercept_errors on;
}
答案 4 :(得分:14)
不再推荐这些答案,因为try_files
在此上下文中比if
工作得更快。只需在php位置块中添加try_files
以测试文件是否存在,否则返回404。
location ~ \.php {
try_files $uri =404;
...
}