Você precisa reescrever a variável $uri
se ela contiver uma barra à direita. Essa é uma reescrita interna para não afetar a URL como aparece para seus clientes.
location ~ ./$ { rewrite ^(.+)/$ $1 last; }
Sua localização principal só pode testar a existência de conteúdo estático. Os arquivos PHP precisam ser manipulados em um bloco de localização diferente.
location / {
try_files $uri $uri.html $uri/index.html @php;
}
A existência de arquivos PHP pode ser testada no local indicado:
location @php {
try_files $uri.php $uri/index.php =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass ...;
}
O =404
pode ser substituído por um URI padrão, por exemplo: /index.php
Uma diretiva root
também é necessária, mas uma diretiva index
não é consultada.
EDITAR:
Se você precisar dar suporte a URIs com a extensão .php
também, você pode reescrevê-los e adicionar a barra ou duplicar o bloco de localização do PHP. Qualquer um:
location ~ \.php$ {
rewrite ^(.*)\.php$ $1/ last;
}
Ou:
location ~ \.php$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass ...;
}