nginx try_files order is the whole routing decision

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.