Seu bloco location ~ \.php$
não vê URIs como example.com/page1
, pois não correspondem à regex.
Você deve colocar sua diretiva try_files $uri/ @extensionless-php;
em um local diferente - geralmente location /
(que verá todos os URIs exceto aqueles que terminam em .php
).
Tente algo assim:
location / {
try_files $uri $uri/ @extensionless-php;
}
location ~ \.php$ {
if ($request_uri ~ (.*)\.php$) {
return 301 $1;
}
try_files $uri =404;
include fastcgi_params;
fastcgi_pass hhvm;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
fastcgi_cache ASPS;
fastcgi_cache_valid 200 60m;
}
location @extensionless-php {
rewrite ^(.*)$ $1.php last;
}
EDIT: para remover a extensão dos URLs que terminam em .php
, o bloco location ~ \.php$
precisa distinguir os URLs apresentados externamente da reescrita interna. Uma maneira de conseguir isso é testar $request_uri
com um bloco if
. Use com cautela, pois reescrever externamente as URLs .php
provavelmente interromperão alguns aplicativos, principalmente ao publicar formulários.