redirects mod_rewrite examples linux url-rewriting nginx rewrite

linux - mod_rewrite - Cómo reescribir si el archivo no se encuentra usando NGINX



nginx redirects examples (4)

Estoy usando NGINX en el servidor de Ubuntu. Tengo este vhost:

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 agregar una regla ...

Si el archivo / dir NO SE ENCUENTRA use index.php

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

¡Gracias!


Puede usar la directiva try_files:

try_files $uri $uri/ /index.php

Esto tratará de encontrar primero los archivos y directorios, y si eso no funciona, usará index.php.

Ver también la sección del controlador frontal en la wiki de nginx.


Necesita flotar configuración:

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; } }

espero ayudarte


Tuve el mismo problema en RH6 y EC2 y lo solucioné al codificar el $document_root , en el param fastcgi_param . Espero que haya ayudado.


Ikke es correcto, usa try_files así:

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

Pero su ubicación PHP fastcgi es insegura. Vea este artículo para saber más sobre eso.

Para su configuración, debe 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; }

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