之前说过nginx其中的try_files选项、如果没有则走服务器404错误码的选项
location ~ .+\.php.*$ {
#try_files如果php文件不存在直接返回404错误码,而不是走location
#rewrite ^/(.*)$ /index.php?s=$1 last;路由重写,通过php框架中报错的404。
#可以直接返回404.html页面
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $request_filename;
include fastcgi_params;
}
然后运行到
error_page 404 /404.html;
但是静态文件有个问题是虽然能返回404页面的内容。但是返回不了404的状态码;对人一样。但对SEO搜索引擎则不同。
正确的写法应该是
error_page 404 /404.php;
#404.php下面的文件内容
<?php
header('HTTP/1.1 404 Not Found'); //声明返回的状态码
header('Status:404 Not Found');
?>
<!DOCTYPE html>
<html>
<head>
有一点其实我也很纳闷。就是return 数据后明明声明了header头但是还是200状态码
public function share(Request $request)
{
header("HTTP/1.1 404 Not Found");
echo $this->fetch('pub/404');
//如果浏览器是执行下面代码
//return $this->fetch('pub/404'); //哪怕你前面声明header头那么返回的测试200;
die;
}
echo 才是返回http状态码 同时返回了内容