Nginx的try_files而不是IF来完成条件逻辑

我正在尝试创buildNginx的vhostconfiguration,其中将包括相当于OpenCart的Apache htaccess重写规则。 这是原始的:

RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css) RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA] 

据我了解,这表示,如果请求不是一个文件,而不是一个目录,并不包含具有上述扩展名之一的文件,然后根据最后一行重写。

这是我目前在Nginx中使用的:

  location / { # This try_files directive is used to enable SEO-friendly URLs for OpenCart try_files $uri @opencart; } location @opencart { rewrite ^/(.+)$ /index.php?_route_=$1 last; } 

这似乎工作,但我担心检查这些特定的文件不存在。 没有任何我能find的build议一种方法来复制该条件,而不使用IF。 我也不确定这部分条件的原因,也就是为什么这些特定的文件很重要。

我的问题是:

  1. 有没有办法做到这一点,即编写一个Nginx的条件相关的文件types,而不使用IFs?

  2. 如果我的Nginx例子的第一个位置块改为try_files $ uri $ uri / @opencart; (添加$ uri /)

谢谢你的帮助。

该特定的RewriteCond的目的是防止请求不存在的静态文件被传递到OpenCart。

您可以在另一个location进行此操作。 例如(我的头顶,所以它可能需要调整):

 location ~ \.(ico|gif|jpg|jpeg|png|js|css)$ { try_files $uri =404; }