如何用php支持设置窗口nginx虚拟目录?

时间:2012-08-14 21:49:19

标签: nginx

Ngigx + PHP-FPM设置并在root目录下工作,但我无法让虚拟目录工作。

我希望//localhost/pb/test.php执行c:\ opt \ php \ public \ test.php,但它打破了“未指定输入文件”。事实上,甚至.html文件都不起作用,但是一旦工作,我希望php-directive也可以在/ pb下工作。

目前的nginx.conf:

server {
    listen       80;
    server_name  localhost;

    location / {
        root   html;
        index  index.html index.htm index.php;
    }

location /pb/ {
    root   /opt/php/public;
        index  index.html index.htm index.php;
}

location ~ \.php$ {
        fastcgi_pass    127.0.0.1:9123;
        fastcgi_index   index.php;
        fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include         fastcgi_params;
}
}

1 个答案:

答案 0 :(得分:1)

http://nginx.org/en/docs/http/ngx_http_core_module.html#location解释了nginx如何匹配位置。 在这种情况下,您的前缀位置/ pb /将匹配,并且nginx永远不会到达* .php匹配位置

我会尝试设置一个命名位置(@bit使其成为命名位置):

location @fastcgi {
  fastcgi_pass    127.0.0.1:9123;
  fastcgi_index   index.php;
  fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
  include fastcgi_params;
}

然后在其他位置的try_files指令中引用它,如下所示:

location /pb/ {
  root   /opt/php/public;
  index  index.html index.html;
  try_files $uri @fastcgi;
} 

location ~ \.php$ {
  alias @fastcgi;
}

上面的try文件会首先尝试一个完全匹配的文件名,如果它没有找到它会将请求传递给@fastcgi位置

或者你可以只在你/ pb / location中的嵌套位置块中重复fastcgi位