Nginx reescrita para remover .php dos arquivos não tem efeito a não ser redirecionar para a página inicial

1

Estou tentando fazer uma reescrita para remover .php dos meus URLs, mas até agora sem sorte. Aqui está o que eu tenho até agora e, em seguida, meus resultados com esta configuração abaixo.

location ~ \.php$ {
  try_files $uri/ @extensionless-php;
  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;
}

Isso leva a:

example.com/page1.php acessando example.com/page1.php e renderizando corretamente example.com/page1 tornando o index.php example.com/page1/ renderizando o index.php

Alguém se deparou com isso? Isso parece uma coisa muito comum de fazer, mas eu estou tendo horas e horas de problemas com isso e tenho procurado interminavelmente on-line.

Obrigado por qualquer ajuda!

    
por Slbox 04.03.2016 / 17:30

1 resposta

0

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.

    
por 04.03.2016 / 18:16