将Nginx重写从“if”转换为“try_files”

时间:2013-11-15 22:16:30

标签: .htaccess nginx rewrite

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

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

但是Nginx wiki说使用“if”是邪恶的http://wiki.nginx.org/IfIsEvil所以我尝试了以下

location /subfolder/ {
    try_files $uri $uri/ /subfolder/index.php?$args;
}

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

谢谢!

1 个答案:

答案 0 :(得分:9)

您希望仅在文件不存在时才进行重写,将其用作try_files

中后退的命名位置
location /subfolder {
    try_files $uri $uri/ @rewrite;
}

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