2011-05-07 18 views
6

Estoy usando NGINX en el servidor de Ubuntu. Tengo este host virtual:Cómo reescribir si el archivo no se encuentra usando NGINX

server { 
     listen  80; 
     server_name *.example.com; 
     root   /home/nginx/vhosts/example.com/web; 

     location/{ 
       index  index.php; 
     } 

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

tengo que añadir una regla ...

Si el archivo/dir no se encuentra el uso index.php

¿Cómo podría cambiar mi servidor { } directiva?

¡Gracias!

Respuesta

12

Usted puede usar la directiva try_files:

try_files $uri $uri/ /index.php 

Este tratará de encontrar archivos y directorios en primer lugar, y si eso no funciona, tendrá que usar index.php.

Vea también la sección front controller en la wiki de nginx.

+0

¿es mejor usar try_files o reescribir? (que es más rápido) – Dail

+0

try_files específicamente hace lo que quiere, así que digo, esto es mejor. – Ikke

+0

dependiendo de proxy_params Normalmente termino con: 224616 # 0: * 96676 reescribo o ciclo de redirección interna mientras redirige internamente a "/ etc/nginx/proxy_params", cliente ... use: if (! -e $ request_filename) { reescribir^(. *) $ /index.php último; } – ppostma1

2

Es necesario establecer fllow: ayuda

server { 
    listen  80; 
    server_name *.example.com; 
    root   /home/nginx/vhosts/example.com/web; 

    location/{ 
      index  index.php; 
    } 

    location ~ \.php$ { 
      root /home/nginx/vhosts/example.com/web; 
      fastcgi_pass 127.0.0.1:9001; 
      fastcgi_index index.php; 
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
      include  /etc/nginx/fastcgi_params; 
    } 
} 

esperanza que

1

tuve el mismo problema en un RH6 EC2 y lo fijé por la codificación duro $document_root, en el parámetro fastcgi_param. Espero que haya sido de ayuda.

3

Zona no es correcta, utilice try_files así:

location/{ 
    try_files $uri $uri/ /index.php; 
} 

Pero su ubicación PHP FastCGI es inseguro. Consulte this article para obtener más información al respecto.

Para su instalación es necesario tener algo como esto:

location ~ \.php$ { 
    try_files $uri /index.php; 
    fastcgi_split_path_info ^(.+\.php)(/.+)$; 

    include /etc/nginx/fastcgi_params; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    fastcgi_pass 127.0.0.1:9001; 
} 

en cuenta que debe establecer locales fastcgi_param después de incluir la configuración global fastcgi_params.

Cuestiones relacionadas