2012-08-23 28 views
9

A continuación se muestra mi nginx.conf.Try_files no tocó PHP (configuración de NginX)

En caso de archivos no existentes /index.php se sirve bien.

Pero cuando mi URL es /foo/bar => /foo/bar/index.php se sirve como código fuente de PHP a través de la descarga.

¿Alguna 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

Tengo el mismo problema. Si toco una URL que se asigna a un archivo inexistente, ejecuta index.php correctamente. Sin embargo, si coloco un nuevo archivo php e intento golpear ese archivo directamente, obtengo su código fuente –

+0

¿Ha iniciado su servicio fastcgi? –

+0

:-) Claro que incluso sirve la última opción /index.php si pongo una URL no existente. –

Respuesta

4

solución fue añadir índice 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

En realidad, la solución es usar una ubicación con nombre como parámetro final para 'try_files'. El problema es que un redireccionamiento interno (es decir, un intento de comprobar si hay otras expresiones regulares, como la expresión regular de manejo de PHP) solo se emite para el parámetro de repliegue final. En la configuración de su pregunta, la solicitud de '/ index.php' ni siquiera intentó hacer coincidir la expresión regular. La razón por la que su respuesta funciona es porque 'indexar cualquier cosa' emitirá una redirección interna si se accede a' cualquier cosa', lo que hace que la expresión regular de PHP coincida. –

+2

@ MahmoudAl-Qudsi podría publicar una respuesta que muestre cómo usar una ubicación con nombre –

1

Mi config

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

recarga nginx y fastcgi tanto

+0

Estoy hablando de try_files. En realidad, necesito más patrones para usar con try_files como drupal y pasajero. Pero al agregar el índice index.php se solucionó esto. Gracias. –

0

también tenía este mismo problema. Cuando tuve el siguiente en el contexto de PHP (location ~ ^(.+\.php)(.*)$ { ...):

try_files $fastcgi_script_name =404; 

.. siempre regresaron 404. Finalmente leí el try_files docs, donde dice:

La ruta a un archivo se construye desde el parámetro de archivo según las directivas raíz y alias.

sólo habían definido alias para cada bloque de ubicación (y ninguno en el bloque de PHP-FPM, por supuesto), pero no tenía un total root establecer en cualquier lugar, por lo que Nginx no sabía dónde buscar un archivo. Una vez que establecí la raíz para el bloque del servidor, comenzó a funcionar.