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
.