未指定输入文件:无法配置 NGINX 别名

No input file specified : Can't config NGINX Alias

我在 Nginx conf 文件中设置两个位置时遇到问题。

在添加一个带有别名的位置之前,我有两个位置没问题。

位置/别名无效。 没有别名的位置 /dev 有效。 我想使用两个别名,因为我有两个文件夹:proddev.

这是我当前的配置文件:

server {
    listen       80;
    listen   [::]:80;
    server_name  domain.com www.domain.com;

    root /home/domain/public_html/www/;
    index index.html index.htm index.php index2.php;

    location / {
        alias /home/domain/public_html/www/prod/;
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }


    location /dev {
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    location ~* \.php$ {
      fastcgi_pass     127.0.0.1:9000;
      include          fastcgi_params;
      fastcgi_param    SCRIPT_FILENAME    $request_filename;
      fastcgi_param    SCRIPT_NAME        $fastcgi_script_name;
    }

    charset utf-8;

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }
    location ~ /\.ht {
        deny all;
    }
}

正在发生的事情是访问域。com/dev/ 效果很好,但一旦它位于 / 位置,我就会收到 "no input file specified" 错误。

如果我输入domain.com/license.txt,我可以看到Wordpress的许可文件。 如果我尝试 domain.com/index.php,我会收到错误消息。

我已经在使用 $request_filename 来避免根与别名问题,知道吗?

您不需要在此方案中使用 alias,但如果您希望 运行 PHP 具有两个单独的根,则需要使用嵌套 location块。

例如:

root /home/domain/public_html/www/prod;

location / {
    try_files $uri $uri/ /index.php?q=$uri&$args;
}
location ~* \.php$ {
  fastcgi_pass     127.0.0.1:9000;
  include          fastcgi_params;
  fastcgi_param    SCRIPT_FILENAME    $request_filename;
  fastcgi_param    SCRIPT_NAME        $fastcgi_script_name;
}

location ^~ /dev {
    root /home/domain/public_html/www;

    try_files $uri $uri/ /dev/index.php?q=$uri&$args;

    location ~* \.php$ {
        fastcgi_pass     127.0.0.1:9000;
        include          fastcgi_params;
        fastcgi_param    SCRIPT_FILENAME    $request_filename;
        fastcgi_param    SCRIPT_NAME        $fastcgi_script_name;
    }
}

前两个 location 块是您的 /prod/ 配置,使用正确的 root 来解析像 /index.php.

这样的 URI

最后的 location 和嵌套的 location 块是您的 /dev/ 配置。 root 设置为正确的值以解析像 /dev/index.php.

这样的 URI

有关更多信息,请参阅 this document