如果使用NGINX找不到文件,如何重写

我在Ubuntu服务器上使用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; } } 

我必须添加规则…

如果文件/目录未find使用index.php

我怎么能改变我的服务器{}指令?

谢谢!

    你可以使用try_files指令:

     try_files $uri $uri/ /index.php 

    这将尝试首先找到文件和目录,如果不起作用,它将使用index.php。

    另请参阅nginx wiki上的前端控制器部分。

    Ikeke是正确的,像这样使用try_files:

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

    但是你的PHP fastcgi位置是不安全的。 看到这篇文章了解更多。

    对于你的设置你需要有这样的东西:

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

    请注意,您应该在包含fastcgi_params全局配置后设置本地fastcgi_param

    你需要设置:

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

    希望能帮到你

    我在RH6和EC2上遇到了同样的问题,我通过硬编码$document_root ,在参数fastcgi_param中解决了这个问题。 希望它有帮助。