nginx:try_files 使用错误的目录

nginx:try_files 使用错误的目录

因此我在 nginx 上有这两个位置块:

location / {
    try_files $uri $uri/ /index.php$is_args$args;
    add_header Access-Control-Allow-Origin *;
}

location /v1/merchants {
    root /var/www/public/api-merchants;
    try_files $uri $uri/ /index.php$is_args$args;
}

location /路由到正确的index.php,但location/v1/merchants应该重定向到/var/www/public/api-merchants/index.php,但它重定向到相同index.phplocation /

我究竟做错了什么?

答案1

该语句的最后一个元素try_files是 URI。所需脚本的 URI 大概是/v1/merchants/index.php。请参阅这个文件了解详情。

如果文件位于/var/www/public/api-merchants/index.php,则应使用alias指令 而不是root指令。请参阅这个文件了解详情。

您无法在此新根目录中执行 PHP 文件,因此您现有的location ~ \.php位置块将接管。您需要使用嵌套位置块并复制您的 PHP 语句(例如fastcgi_pass在其中复制您的 PHP 语句(例如)。此外,使用^~修饰符来防止其他location ~ \.php位置块接管。请参阅这个文件了解详情。

例如:

location ^~ /v1/merchants {
    alias /var/www/public/api-merchants;
    if (!-e $request_filename) { rewrite ^ /v1/merchants/index.php last; }

    location ~ \.php$ {
        if (!-f $request_filename) { return 404; }

        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME $request_filename;
        fastcgi_pass   ...;
    }
}

我避免使用try_filesalias因为这个问题。 笔记这种警告关于 的使用if

相关内容