记使用thinkphp5时 default_action 设置不生效的问题原因

360次阅读
没有评论

记使用 thinkphp5 时 default_action 设置不生效的问题原因

问题现象:

问题 1

路由 /mini/index/?vscode=487920634732344 无法正常请求,
但是 /mini/index/index?vscode=487920634732344这个路由又是正常请求
即表示框架设置 default_action = index,不生效

问题 2

路由设置为混合模式下,
route 路由文件的定义的路由 \think\Route::rule('mini/index','mini/index/index'); 无法生效

问题 3

/mini/index/?vscode=487920634732344请求失败是 nginx 返回的 403 状态码,并非框架返回的异常

问题 4

重新在 mini 模块下写了个控制器TestController,并访问该路由,
路由 /mini/test/ 访问正常,此时 default_action = index又是正常的。

 

发现问题

location / {
    # 伪静态规则
    if (!-e $request_filename) {rewrite ^(.*)$ /index.php?s=$1 last; break;
    }
}

发现框架伪静中的判断条件 !-e $request_filename当注释掉这个判断条件之后,上述问题都自动消失。

!-e $request_filename意思是当访问的文件和目录不存在时,重定向到某个 php 文件,那么问题来了,应该就是在网站根目录中有 mini/index这个目录存在。

因为 tp 框架的网站根目录是 public 目录,于是打开 public 目录确切发现存在对应的mini/index 目录。

至此,问题已排查清楚。

正文完
有偿技术支持加微信
post-qrcode
 
评论(没有评论)
验证码