nginx重写路由隐藏入口文件报错引发的思考

隐藏thinkphp6的入口文件实现方式:

##在伪静态一栏加入代码
```
if (!-e $request_filename) {
    rewrite ^/(.*)$ /index.php/$1 last; 
}
```
##当访问 /admin/login时,会触发上面的URL重写,将规则转换成/index.php/admin/login,之后tp6就可以理解了

但是在linux宝塔环境下,访问/index.php/admin/login会触发URL重写代码,将链接转成/index.php/index.php/admin/login

造成报错
```
控制器不存在:app\controller\index\Php
```
##原因其实是在上述环境里,/index.php被当成了一个目录而未被当成文件,造成了url的错误重写
##为什么在在linux宝塔环境下,nginx把URL重写之后,/index.php会才被当成文件呢

勉强解决方法

if (!-e $request_filename) {
   rewrite ^/index.php/(.*)$ /index.php/$1 last;
   rewrite ^/(.*)$ /index.php/$1 last; 
 }
 ```
posted @ 2020-10-24 17:41  cl94  阅读(308)  评论(0编辑  收藏  举报