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

Dai*_*ail 6 linux rewrite nginx url-rewriting

我在Ubuntu服务器上使用NGINX.我有这个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;
        }
}
Run Code Online (Sandbox Code Playgroud)

我必须添加规则......

如果文件/目录未找到,则使用index.php

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

谢谢!

Ikk*_*kke 12

您可以使用try_files指令:

try_files $uri $uri/ /index.php
Run Code Online (Sandbox Code Playgroud)

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

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


小智 5

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

location / {
    try_files $uri $uri/ /index.php;
}
Run Code Online (Sandbox Code Playgroud)

但是您的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;
}
Run Code Online (Sandbox Code Playgroud)

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