根据不同的请求更改nginx root

时间:2014-09-26 10:00:48

标签: php nginx root

我正在尝试配置nginx。如果我输入http://localhost/dav,则应使用index.php指令中配置的root(c:/ wt-nmp / www / app-dav / frontend / web)中的location /dav脚本。但是当我调试nginx时,它仍然使用root config中配置的server

在调试中它看起来像:

  1. 它使用location /dav并将root设置为新值并更改为index.php?dav
  2. 现在它使用location ~ \.php$,但$document_root仍然指向c:/wt-nmp/www/m24/web,但我认为应该在location /dav中更改,如第1点所述。
  3. 我的问题是当我输入c:/wt-nmp/www/app-dav/frontend/web时如何配置nginx以使用http://localhost/dav中的脚本。

    我认为这段代码应该是这样的:

    1. rootserver指令设置为.../m24/web
    2. 当我输入网址http://example.com/dav时,指令location /dav应该将root更改为.../m24/app-dav/frontend/web,并且应该执行该位置的php脚本。
    3. 但是当我调试这个应用程序时,.../m24/web的脚本仍在执行。为什么root中的location /dav指令不会更改$document_root值。 $document_root仍然指向.../m24/web
    4. 我的配置中最重要的部分如下:

      server {
          ...
      
          root "c:/wt-nmp/www/m24/web";
          index index.html index.htm index.php;
      
          location /dav {
              root "c:/wt-nmp/www/m24/app-dav/frontend/web";
              # The $uri gets mangled by nginx, however Yii urlmanager requires REQUEST_URI to route
              set $original_uri $uri?$args;
              # Try the actual uri, then uri as a directory, then send it to yii
              try_files $uri $uri/ /index.php?$args;
          }
      
          location / {
              #set original_uri to use as the request_uri later on  
              #The $uri gets mangled by nginx, however Yii urlmanager requires REQUEST_URI to route  
              set $original_uri $uri?$args;
              #Try the actual uri, then uri as a directory, then send it to yii  
              try_files $uri $uri/ /index.php?$args;
          }
      
          location ~ \.php$ {
              fastcgi_pass                  php_farm;
              include                       nginx.fastcgi.conf;
              fastcgi_split_path_info       ^(.+\.php)(/.+)$;
              fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
              fastcgi_param REQUEST_URI     $original_uri; 
          }
      }
      

1 个答案:

答案 0 :(得分:0)

你应该有2个位置指令,一个用于/dav下的php文件,另一个用于/dav下的静态文件:

location ~ ^/dav/.*\.php$ {                 
        root "c:/wt-nmp/www/app-dav/frontend";
        try_files $uri =404; 
        include     nginx.fastcgi.conf;
        fastcgi_pass    php_farm;
}

location ~ ^/dav/ {
         root "c:/wt-nmp/www/app-dav/frontend";
}

这样文件将从c:/wt-nmp/www/app-dav/frontend/dav提供。因此,您可能还需要rename c:/wt-nmp/www/app-dav/frontend/web c:/wt-nmp/www/app-dav/frontend/dav,因为URL路径必须与根子目录匹配!

另外,请确保使用最新版本的WT-NMP - portable Nginx Mysql Php development stack for Windows`