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会依次寻找以下资源:
http://www.letiantian.xyz/3
http://www.letiantian.xyz/3/
=http://www.letiantian.xyz/3/index.html
=http://www.letiantian.xyz/3/index.htm
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;
}
}