Solução proposta (mostrando apenas os blocos de localização):
location ~ ./$ { rewrite ^(.*)/ $1 last; }
location / {
if ($request_uri ~ ^(.*)\.(php|htm)) { return 302 $1$is_args$args; }
try_files $uri $uri/index.html $uri/index.htm @php;
}
location @php {
try_files $uri.php $uri/index.php =404;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
}
location /somedirectory {
rewrite ^(.*)\.php$ $1 break;
try_files $uri $uri/index.html $uri/index.htm @php;
}
O bloco location ~ /$ remove silenciosamente qualquer barra final, pois isso interfere nas diretivas try_files mais tarde.
Observe que o bloco location ~ \.php$ foi removido para que .php URIs sejam processados pelo bloco location / .
O bloco location / redirecionará os URIs com uma extensão .html e .php (o que é consistente com os dois if de blocos da sua configuração original.
O bloco location / tenta vários URIs, incluindo a lista da diretiva index (exceto index.php , que é tratado posteriormente).
Observe que o elemento $uri/ e a diretiva index não são mais usados.
A ação final é invocar o bloco location @php nomeado para manipular os arquivos .php e index.php .
Até este ponto, a funcionalidade é semelhante à sua configuração existente.
O location /somedirectory modifica o comportamento de URIs abaixo de somedirectory . Ele permite que .php URIs mantenham sua extensão removendo-a silenciosamente antes da diretiva try_files .