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.