Talvez devido à correspondência de prefixo ( ^~
) no bloco de localização e nginx esteja ignorando a regex verifique :
If the longest matching prefix location has the “^~” modifier then regular expressions are not checked
Tente remover a verificação de prefixo, por exemplo:
location /_links/ {
Regex here
}
Também remova a declaração raiz dentro do location /_links/ block
você não precisa, veja pitfalls donginx para mais informações, basicamente servidores root declaration
é usado e a localização é correspondida $root/$location
Além disso, conforme sugerido acima, observe a diretiva try_files
em vez de if(condition){match}
Ou seja. em vez de:
if (!-f $request_filename) {
rewrite ^/(.*)$ /index.php?q=$1 last;
}
Uma solução melhor seria:
try_files $uri $uri/ /index.php?q=$uri;
Isso também é mencionado na página wiki de armadilhas do nginx .