nginx别名和动态目录名

nginx别名和动态目录名,nginx,alias,Nginx,Alias,我在这件事上花了很多时间,但我找不到解决办法。 我需要一种方法来指向相同的url,但不同的根目录到同一个应用程序。我不想使用重写,因为应用程序必须处理根目录名,而重写会丢弃它 http://www.host.com/a/ --> /var/www/html/project/ http://www.host.com/b/ --> /var/www/html/project/ http://www.host.com/c/ --> /var/www/html/project/ 我已

我在这件事上花了很多时间,但我找不到解决办法。 我需要一种方法来指向相同的url,但不同的根目录到同一个应用程序。我不想使用重写,因为应用程序必须处理根目录名,而重写会丢弃它

http://www.host.com/a/ --> /var/www/html/project/
http://www.host.com/b/ --> /var/www/html/project/
http://www.host.com/c/ --> /var/www/html/project/
我已经成功地在nginx中配置了一个别名目录,其中包含固定的名称
vdirectory
,并使nginx将请求转发给fastcgi

location /vdirectory {

      alias /var/www/html/project/;
      try_files $uri $uri/ /vdirectory/index.php;
      location ~ \.php$ {
          fastcgi_pass unix:/var/run/php5-fpm.sock;
          include fastcgi_params;                       
          fastcgi_param SCRIPT_FILENAME $request_filename;
      }
}
以上工作正常

因为我不想使用固定的根目录名,而是使用任意的根目录名,所以到目前为止我一直在管理以下内容:

location  ~ ^/(.?)$  {

      alias /var/www/html/project/;
      try_files $uri $uri/ /$1/index.php;
      location ~ \.php$ {
          fastcgi_pass unix:/var/run/php5-fpm.sock;
          include fastcgi_params;                       
          fastcgi_param SCRIPT_FILENAME $request_filename;
      }
}
不用说,它返回404。这是一个好兆头,因为这意味着regex已经识别了路径,但请求没有正确转发


工作配置和错误配置之间的唯一区别是
/vdirectory
~^/(.?)$
别名
在正则表达式
位置
块内时的工作方式不同。有关详细信息,请参阅。您需要捕获URI的其余部分,并将其附加到
别名
值中。例如:

location ~ ^/(?<prefix>[^/]+)/(?<name>.*)$ {
    alias /var/www/html/project/$name;

    if (!-e $request_filename) { rewrite ^ /$prefix/index.php last; }

    location ~ \.php$ {
        if (!-f $request_filename) { return 404; }

        fastcgi_pass unix:/var/run/php5-fpm.sock;
        include fastcgi_params;                       
        fastcgi_param SCRIPT_FILENAME $request_filename;
    }
}
location~^/(?[^/]+)/(?.*)${
别名/var/www/html/project/$name;
如果(!-e$request_filename){rewrite^/$prefix/index.php last;}
位置~\.php${
如果(!-f$request_filename){return 404;}
fastcgi_pass unix:/var/run/php5-fpm.sock;
包括fastcgi_参数;
fastcgi_参数脚本_文件名$request_文件名;
}
}

由于以下原因,我避免在同一块中使用
try\u文件
alias
。在正则表达式
位置
块内时,请参见使用
if

别名
的说明。有关详细信息,请参阅。您需要捕获URI的其余部分,并将其附加到
别名
值中。例如:

location ~ ^/(?<prefix>[^/]+)/(?<name>.*)$ {
    alias /var/www/html/project/$name;

    if (!-e $request_filename) { rewrite ^ /$prefix/index.php last; }

    location ~ \.php$ {
        if (!-f $request_filename) { return 404; }

        fastcgi_pass unix:/var/run/php5-fpm.sock;
        include fastcgi_params;                       
        fastcgi_param SCRIPT_FILENAME $request_filename;
    }
}
location~^/(?[^/]+)/(?.*)${
别名/var/www/html/project/$name;
如果(!-e$request_filename){rewrite^/$prefix/index.php last;}
位置~\.php${
如果(!-f$request_filename){return 404;}
fastcgi_pass unix:/var/run/php5-fpm.sock;
包括fastcgi_参数;
fastcgi_参数脚本_文件名$request_文件名;
}
}

由于以下原因,我避免在同一块中使用
try\u文件
alias
。如果

是,请参见关于
的使用。这就是我要找的。得到如此精确的解是非常罕见的。非常感谢。这就是我要找的。得到如此精确的解是非常罕见的。万分感谢