nginx reescrita não incluindo arquivos .php?

2

Eu tenho isso configurado em uma configuração do site nginx, que está funcionando perfeitamente para redirecionar todas as solicitações de .html para /index.php . No entanto, ele não reescreve test.php para /index.php e, em vez disso, gera um erro 404.

Alguém pode lançar alguma luz, por favor? Aqui está a minha configuração do site:

server {
    listen 80 default_server;

    location / {
            root /srv/www/htdocs;
            index index.php;

            try_files $uri $uri/ /index.php;

            location ~* \.php$ {
                    fastcgi_pass 127.0.0.1:9000;
                    fastcgi_param HTTPS on; # <-- add this line
                    fastcgi_index index.php;
                    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                    include /etc/nginx/fastcgi_params;
                    fastcgi_buffer_size 128k;
                    fastcgi_buffers 256 4k;
                    fastcgi_busy_buffers_size 256k;
                    fastcgi_temp_file_write_size 256k;
                    fastcgi_intercept_errors on;
            }
    }
}

Qualquer ajuda apreciada - estou arrancando meu cabelo!

    
por Splodge 27.04.2012 / 13:00

2 respostas

1

location ~* \.php$ corresponderá a qualquer *.php e fará com que try_files retorne, independentemente de sua existência (daí o 404). Considere o uso de reescreva !

    
por 27.04.2012 / 14:25
1

Quando uma diretiva try_files é colocada diretamente em um servidor, ela só é avaliada se nenhuma localização corresponder, portanto, ela não entrará em vigor se uma solicitação já terminar com .php. A maneira de corrigir isso é adicionar um try_files $uri /index.php =404; dentro do local do php.

    
por 27.04.2012 / 15:38