nginx: try_files não encontrando arquivos estáticos, voltando ao PHP

3

Configuração relevante:

location /myapp {
    root /home/me/myapp/www;
    try_files $uri $uri/ /myapp/index.php?url=$uri&$args;

    location ~ \.php {
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        include       /etc/nginx/fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root/index.php;
    }
}

Eu absolutamente tenho um arquivo foo.html em /home/me/myapp/www , mas quando eu navego para /myapp/foo.html ele é tratado pelo PHP, o último retorno na lista try_files .

Por que isso está acontecendo?

    
por Wells Oliver 22.10.2013 / 20:10

1 resposta

4

Se você navegar até /myapp/foo.html , o Nginx verificará o arquivo em /home/me/myapp/www/myapp/foo.html . Quando não o encontra lá, passa para o fallback na lista try_files .

Se você precisar do Nginx para verificar o arquivo em /home/me/myapp/www/foo.html , será necessário usar alias em vez de root , no seu caso de uso. Aqui está a solução ...

location /myapp {
    alias /home/me/myapp/www;
    try_files $uri $uri/ /myapp/index.php?url=$uri&$args;

    location ~ \.php {
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        include       /etc/nginx/fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root/index.php;
    }
}

Observe que há um erro de longa data que alias e try_files não funcionam juntos. Além disso, observe que usar alias pode quebrar outras partes de sua configuração, como processamento de PHP!

    
por 23.10.2013 / 04:31

Tags