为Nginx静态网站设置404


#Nginx#


2014-04-18

这段时间自己写了个静态网站生成工具(Jekyll等自然也可以,就是自己用的不熟练)。笔者希望404页面能够丰富的内容(也就是当404错误时候,使用一个静态或者动态的文件,例如error.html来响应用户,例如,提示用户请求内容不存在,推荐用户访问其他内容),而非是简陋的“404”几个字而已。

笔者使用nginx 1.1.19 搭建的服务器,为了实现自己的这个要求,开始时候网站配置如下:

server {
    listen   80; ## listen for ipv4; this line is default and implied
    #listen   [::]:80 default ipv6only=on; ## listen for ipv6
 
    server_name letiantian.xyz www.letiantian.xyz;
  
    location / {
        root /home/www;
    	index index.html index.htm;
	    try_files $uri $uri/ /error.html;
    }
}

以上配置的重点在try_files $uri $uri/ $uri/index.html /error.html;,它表示,如果你的请求是http://www.letiantian.xyz/3,nginx会依次寻找以下资源:

  1. http://www.letiantian.xyz/3
  2. http://www.letiantian.xyz/3/ = http://www.letiantian.xyz/3/index.html = http://www.letiantian.xyz/3/index.htm
  3. http://www.letiantian.xyz/error.html

所以,当请求的页面不存在的时候,其会访问/home/www/error.html。这样做基本达到要求,问题是返回error.html内容时,http状态为200,这对搜索引擎是不友好的。如果要http状态为404,可以如下配置:

server {
	listen   80; ## listen for ipv4; this line is default and implied
    #listen   [::]:80 default ipv6only=on; ## listen for ipv6

	server_name letiantian.xyz www.letiantian.xyz;
 
	location / {
	    root /home/www;
    	index index.html index.htm;
		error_page 404 /error.html;
	}
}

( 本文完 )