
问题现象:
问题 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 目录。
至此,问题已排查清楚。