try_files takes each argument in turn and serves the first that exists, falling through to the last unconditionally. Every front-controller configuration is one line of it, and the arguments in the wrong order produce failures that look unrelated to routing.
location / {
try_files $uri $uri/ /index.php?$query_string;
}
$uri first means a real file wins, so static assets never reach PHP. $uri/ next allows directory handling. The final argument is the fallback and is the only one that may be a rewrite rather than a path. Put /index.php first and every request runs through PHP; drop the $query_string and every filtered URL loses its parameters, which presents as a filter page that ignores the filters.