我无法在Nginx conf文件中设置两个位置。
在添加一个带别名的位置之前,我没有两个位置的问题。
使用别名的位置/不起作用。 没有别名的位置/ dev有效。 我想使用两个别名,因为我有两个文件夹: prod 和 dev 。
这是我当前的conf:
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;
}
}
正在发生的事情是,访问domain.com/dev/的效果很好,但是只要它位于/
位置,我就会收到“未指定输入文件”错误。
如果输入domain.com/license.txt
,则可以看到Wordpress的许可证文件。
如果我尝试domain.com/index.php
,则会收到错误消息。
我已经在使用$ request_filename来避免root和别名问题了,知道吗?
答案 0 :(得分:2)
您无需在此方案中使用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。