chaihongjun.me

thinkphp5.0.24版本开发网站出现的各种bug解决笔记

记录thinkphp5.0.24版本开发网站出现的各种bug解决笔记,目前遇到如下几个问题:

  1. 试验了网上几个关于URL重写(包括隐藏index.php和达成伪静态)的nginx配置,最终还是基于thinkphp官方给的答案做一点修改是有效果:

  2. #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; 
       }
        ... 其他配置
    }
  3. 使用自定义404页面需要注意的事项有几个,这里的自定义的404页面使用的是控制器(Error)方法渲染视图模板文件动态生成的。系统的默认空控制器名正好是Error,所以我们借用来创建404页面的控制器,以文章页控制器为例:

  4.     $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;
     }


知识共享许可协议本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。作者:柴宏俊»