nginxconfiguration – redirect,如果文件存在

我正在将一个由别人写的php应用程序从apache转换到nginx

开发人员在.htaccess中有这个

<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-s RewriteRule ^(.*)$ api.php?rquest=$1 [QSA,NC,L] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^(.*)$ api.php [QSA,NC,L] RewriteCond %{REQUEST_FILENAME} -s RewriteRule ^(.*)$ api.php [QSA,NC,L] </IfModule> 

我简单地读了这个
“如果文件/目录不存在,请将请求重写为api.php?rquest = $ uri”
“如果文件/目录确实存在,请将该请求重写为api.php”

我试图在nginx中复制这个,但遇到问题。 我创build了一个位置指令

 location / { # if the file or folder doesn't exist add it as arguments to api.php try_files $uri $uri/ /api.php?rquest=$uri&$args; index api.php; } 

和我想要做的只是直接到一个静态index.html页面某处如果文件/目录确实存在。

我试图重写服务器级别“if”语句

 if (-e $request_filename){ rewrite ^(.*)$ /api.php break; } 

但是这打破了其他有效的位置指令。

我该如何做到这一点: 如果文件/目录存在,redirect到一个静态的HTML页面

—————-更新—————

我终于结束了类似的东西

 server { ... root /home/ballegroplayer/api/public; index index.php index.html index.htm; try_files $uri $uri/ /api.php?rquest=$uri&$args; if (-e $request_filename){ rewrite ^(.*)$ /api.php last; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php5-fpm.sock; } } 

最终,在“if”语句中,我们不能redirect到一个静态文件,因为在“try_files”指令成功之后,我们被redirect到api.php ,它存在并会导致“if”语句被触发,获取静态html页面。

我认为使用last而不是break可以解决这个问题,因为这使得nginx不能用重写的URLpath重新处理位置。