Nginx try_files em vez de IFs para realizar a lógica condicional

1

Estou tentando criar configurações de vox do Nginx que incluirão o equivalente das regras de reconfiguração do htaccess do Apache para o OpenCart. Aqui está o original:

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]

Pelo que entendi, isso diz que, se a solicitação não é um arquivo, e não é um diretório, e não contém um arquivo com uma das extensões acima, então reescreva de acordo com a última linha.

Aqui está o que estou usando no momento no 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;
  }

Isso parece funcionar, mas estou preocupado que a verificação desses arquivos não esteja lá. Nada do que consegui encontrar sugere uma maneira de duplicar essa condição sem usar IFs. Eu também não tenho certeza sobre o motivo dessa parte das condições, ou seja, por que esses arquivos particulares são importantes.

Minhas perguntas são:

  1. Existe uma maneira de fazer isso, ou seja, escrever um equivalente Nginx à condição referente a esses tipos de arquivo sem usar IFs?

  2. O primeiro bloco de localização do meu exemplo Nginx deve ser alterado para try_files $ uri $ uri / @opencart; (adicionando o $ uri /)

Obrigado por qualquer ajuda.

    
por David Rahrer 02.06.2015 / 21:28

1 resposta

2

A finalidade desse RewriteCond em particular é impedir que solicitações de arquivos estáticos inexistentes sejam passadas para o OpenCart.

Você pode fazer isso com outro location . Por exemplo (fora do topo da minha cabeça, por isso pode precisar de ajustes):

location ~ \.(ico|gif|jpg|jpeg|png|js|css)$ {
    try_files $uri =404;
}
    
por 02.06.2015 / 21:32