我正在尝试创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。 我也不确定这部分条件的原因,也就是为什么这些特定的文件很重要。
我的问题是:
有没有办法做到这一点,即编写一个Nginx的条件相关的文件types,而不使用IFs?
如果我的Nginx例子的第一个位置块改为try_files $ uri $ uri / @opencart; (添加$ uri /)
谢谢你的帮助。
该特定的RewriteCond的目的是防止请求不存在的静态文件被传递到OpenCart。
您可以在另一个location进行此操作。 例如(我的头顶,所以它可能需要调整):
location ~ \.(ico|gif|jpg|jpeg|png|js|css)$ { try_files $uri =404; }