Talvez seja necessário reler o documento conforme explicado aqui:
Syntax: rewrite regex replacement [flag]; Default: — Context: server, location, if
[ ... ]
An optional flag parameter can be one of: last stops processing the current set of ngx_http_rewrite_module directives and starts a search for a new location matching the changed URI; break stops processing the current set of ngx_http_rewrite_module directives as with the break directive; redirect returns a temporary redirect with the 302 code; used if a replacement string does not start with “http://” or “https://”; permanent returns a permanent redirect with the 301 code.
Então, quando você usa o last
, é como um redirecionamento interno para o nginx. Eu estou supondo que você declarou um location ~ \.php$
bloco após este, a fim de processar arquivos php, mas não será escolhido no processo de eleição de localização, porque o primeiro regex correspondente ganha. Assim, ele entra no primeiro bloco de localização recursivamente.