thinkphp5框架默认未开启404页面,访问不存在的模块都是统一返回的一个异常页面。错误码为500,如果是使用的$this->error()方法则都是返回的200状态码。以前我一直都用的$this->error("page not found");方法来提示页面不存在,现在发现这样对于seo很不友好。因为不存在的数据也返回了200.正常来说,不存在的数据应该返回404.而不是200.否则会让搜索引擎认为是在作弊.thinkphp中针对于http的错误都是使用的异常。可通过abort函数来直接抛出异常。abort可传入http状态码和信息;极为方便。
在applicatin/config.php 配置文件中将http_exception_template 配置注释去掉如果没有这个选项可自行新增
其中404=>APP_PATH . 'common/view/tpl/404.tpl'
代表对应的404码,和对应的404文件位置。你可以自定义去修改这个文件位置。
这个时候当网页出现404的时候,就会显示404.tpl文件中的内容。默认是未找到页面。可以自行修改。
通过上面方法开启404页面后,默认所有的404都是返回的文件中固定的内容。这样很不方便。有时候我们需要获取出详细的错误信息。比如:在一个文章详情页中通过文章id来查询数据,当传入的文章id不存在时:提示一个数据不存在。
首先在控制器中写入详情页方法,通过abort函数来抛出http异常,abort传入一个404状态码,和一个错误信息。
然后在404页面文件中,通过{$e->getMessage()}即可成功获取到对应的错误信息。
访问不存在的一个文章id
现在访问不存在的数据错误状态码是404了,而不是之前的200.
访问不存在的模块时状态码也不是500了。都是404
总的来说,访问不存在的数据或者模块应该提示404,而不是500或者200.这样才对seo友好。