if (!-e $request_filename) 是判断文件是否存在,如果不存在就进行rewrite重写。
网上大多数配置方式,这里都变成了无条件重写,曾经自己也坑在这里,甚至用了奇葩的方式去临时处理。
指定某些后缀名的不做rewrite重写,类似如下。

rewrite  ^/(?!.jpg)(?!.php)(?!.css)(?!.js)(?!upload)(.*)$  /index.php/$1 last;

也曾怀疑和搜索为什么文件明明存在,还要被重写。

原因是 if (!-e $request_filename)root要在一个配置层级,如果在location /{}里的root写了不同的目录。
就得也在这里include一次 .htaccess,对于多个location时,需要特别注意。

963.png

图中,原把root写在location / 里,就出了问题,无法加载模板index.php,复制一条出来就好了。