之前说过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状态码 同时返回了内容

Last modification:January 31, 2020
如果觉得我的文章对你有用,请随意赞赏