2012-08-23 17 views
9

Di seguito è riportato il mio nginx.conf.Try_files non ha colpito PHP (configurazione NginX)

In caso di file non esistenti /index.php viene servito bene.

Ma quando il mio URL è /foo/bar => /foo/bar/index.php viene fornito come codice sorgente PHP tramite download.

Qualche idea?

try_files $uri $uri/ $uri/index.php /index.php; 

location ~ \.php$ { 
    fastcgi_pass 127.0.0.1:9000; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    include fastcgi_params; 
} 
+2

Ho lo stesso problema. Se premo un url che mappa su un file inesistente, esegue correttamente index.php. Tuttavia, se metto un nuovo file php e tento di colpire direttamente quel file, ottengo il suo codice sorgente –

+0

Hai iniziato il tuo servizio fastcgi? –

+0

:-) Certo, serve anche l'ultima opzione /index.php se inserisco l'URL non esistente. –

risposta

4

soluzione era quella di aggiungere indice index.php

index index.php 

    try_files $uri $uri/ $uri/index.php /index.php; 

    location ~ \.php$ { 
     fastcgi_pass 127.0.0.1:9000; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     include fastcgi_params; 
    } 
+7

In realtà, la soluzione è utilizzare una posizione denominata come parametro finale di 'try_files'. Il problema è che un reindirizzamento interno (ovvero un tentativo di verificare se sono presenti altre regex come la gestione della regex di PHP) viene emesso solo per il parametro di fallback finale. Nella configurazione della tua domanda, la richiesta di '/ index.php' non ha nemmeno provato a far corrispondere la regex. Il motivo per cui la tua risposta funziona è perché "index anything" emetterà un reindirizzamento interno se si accede a "qualsiasi cosa", facendo corrispondere la regex del PHP. –

+2

@ MahmoudAl-Qudsi è possibile pubblicare una risposta che mostri come utilizzare una posizione denominata –

1

mio config

index index.html index.htm index.php; 
location ~ \.php$ { 
     fastcgi_pass unix:/tmp/php-fpm.sock; 
     include fastcgi_params; 
     } 

ricarica nginx e FastCGI sia

+0

Sto parlando di try_files. In realtà ho bisogno di più schemi da usare con try_files come drupal e passenger. Ma l'aggiunta dell'indice index.php ha risolto questo problema. Grazie. –

0

Ho anche avuto questo stesso problema. Quando ho avuto il seguente nel contesto PHP (location ~ ^(.+\.php)(.*)$ { ...):

try_files $fastcgi_script_name =404; 

.. è sempre restituito 404. Infine ho letto il try_files docs, in cui si dice:

Il percorso di un file è costruito dal parametro file in base alle direttive root e alias.

avevo definito solo alias per ogni blocco posizione (e nessuno nel blocco PHP-FPM, naturalmente), ma non ha avuto un complessivo root set da nessuna parte, in modo da nginx non sapeva dove cercare un file. Una volta impostato il root per il blocco del server, ha iniziato a funzionare.

Problemi correlati