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