记录thinkphp5.0.24版本开发网站出现的各种bug解决笔记,目前遇到如下几个问题:
试验了网上几个关于URL重写(包括隐藏index.php和达成伪静态)的nginx配置,最终还是基于thinkphp官方给的答案做一点修改是有效果:
使用自定义404页面需要注意的事项有几个,这里的自定义的404页面使用的是控制器(Error)方法渲染视图模板文件动态生成的。系统的默认空控制器名正好是Error,所以我们借用来创建404页面的控制器,以文章页控制器为例:
#URL重写隐藏index.php,页面URL伪静态 # 这个是官方写法 location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=/$1 last; break; } }
这里特别注意如果你的入口文件index.php是在public目录内的,那么按照官方的配置就可以了,如果你的入口文件index.php和博主一样是在项目根目录也就是和public目录同级,那么需要去掉外面的location:
# 入口文件index.php在项目根目录内 server { ... 其他配置 if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=/$1 last; break; } ... 其他配置 }
$id = $this->request->param('id/d'); //查询对应的ID是否有文章存在 $currentArticle = ArticleModel::get($id); if (empty($currentArticle)) { throw new \think\exception\HttpException(404, "参数有误"); }
这里的文章页控制器判断出访问一个不存在的页面ID之后立即抛出404异常交给了框架,这个时候需要配合路由规则 :
Route::get('404', 'index/error/index');
以及nginx正确的错误页配置:
error_page 404 /404.html; #URL 重写 if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=/$1 last; break; }