未指定输入文件:无法配置 NGINX 别名
No input file specified : Can't config NGINX Alias
我在 Nginx conf 文件中设置两个位置时遇到问题。
在添加一个带有别名的位置之前,我有两个位置没问题。
位置/别名无效。
没有别名的位置 /dev 有效。
我想使用两个别名,因为我有两个文件夹:prod 和 dev.
这是我当前的配置文件:
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。
我在 Nginx conf 文件中设置两个位置时遇到问题。
在添加一个带有别名的位置之前,我有两个位置没问题。
位置/别名无效。 没有别名的位置 /dev 有效。 我想使用两个别名,因为我有两个文件夹:prod 和 dev.
这是我当前的配置文件:
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
.
最后的 location
和嵌套的 location
块是您的 /dev/
配置。 root
设置为正确的值以解析像 /dev/index.php
.
有关更多信息,请参阅 this document。