将Nginx重写从"if"转换为"try_files"

use*_*300 5 .htaccess rewrite nginx

我有以下NGINX重写规则,适用于安装在子文件夹中的PHP脚本:

location /subfolder/ {
  if (!-e $request_filename){
    rewrite ^/subfolder/(.*) /subfolder/index.php?do=/$1;
  }
}
Run Code Online (Sandbox Code Playgroud)

但是Nginx wiki说使用"if"是邪恶的http://wiki.nginx.org/IfIsEvil所以我试过以下

location /subfolder/ {
    try_files $uri $uri/ /subfolder/index.php?$args;
}
Run Code Online (Sandbox Code Playgroud)

但它不能替代上面的那个,虽然它适用于WordPress和大多数PHP脚本.如果有办法翻译它使用"try_files"?

谢谢!

Moh*_*ady 9

您只想在文件不存在时才进行重写,将其用作后退的命名位置 try_files

location /subfolder {
    try_files $uri $uri/ @rewrite;
}

location @rewrite {
    rewrite ^/subfolder/(.*) /subfolder/index.php?do=/$1;
}
Run Code Online (Sandbox Code Playgroud)