Limpar URLs e extensão do php no nginx

2

Eu observei dezenas de outras perguntas e referências na Web - e, em todos os meus cálculos, minha configuração deve funcionar, mas não funciona.

Eu tenho a instalação do nginx com o php-fpm. Se eu tentar acessar um arquivo .php, ele será executado corretamente e eu obtenho os resultados corretos. Eu tenho isso no meu arquivo de configuração:

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
}

Agora, quero configurar meu aplicativo da web para que /somedir/file execute automaticamente /somdir/file.php enquanto ainda exibe /somdir/file na barra de endereço do navegador. Então modifiquei minha configuração para conter o seguinte:

location / {
    try_files $uri $uri/ $uri.php?query_string
}

Este tipo de funciona, isto é, o servidor acessa o arquivo .php. No entanto, em vez de executá-lo usando o bloco location ~ \.php$ existente acima, ele simplesmente exibe o código-fonte do php como o download no navegador. Se eu acrescentar o .php manualmente ao URL solicitado, o php será executado.

Parece que uma vez que o servidor corresponde a try_files a $uri.php , ele não faz outra passagem nos locais para ver o que precisa fazer com os arquivos php. Eu tentei colocar o bloco de php acima e abaixo do location / , mas não faz diferença.

Como posso fazer com que o php seja executado?

    
por Aleks G 18.02.2016 / 17:50

2 respostas

4

Você tentou com a diretiva rewrite ? Por exemplo:

location / {
    try_files $uri $uri/ @extensionless-php;
    index index.html index.htm index.php;
} 

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
}

location @extensionless-php {
    rewrite ^(.*)$ $1.php last;
}

Fonte: link

    
por 18.02.2016 / 20:11
1

try_files sempre é executado no contexto atual, é por isso que ele serve seus php -scripts como arquivos simples - a localização atual não possui fastcgi_pass . try_files é mau porque, em vez de simples, cria blocos questionáveis, evite-o.

No mesmo tempo, regexp -locations têm prioridade sobre locais comuns, é por isso que nada muda quando você inverte a ordem.

Pessoalmente, acho que ocultar as extensões .php da barra de endereço é inútil, pois adiciona mais código ao arquivo de configuração.

    
por 18.02.2016 / 18:53