2016-05-12 82 views
1

目前我正在与webprojects以下目录结构(简体):NGINX重写请求文件外部根

  • project_folder/
    • 公共/
    • 根/
    • 指数。 php

我想要做的是设置根服务器块:

root /project_folder/root/; 

但是,当一个请求位置不存在,我希望它转发给project_folder/index.php的请求。我试过以下内容:

try_files $uri ../index.php?$query_string; 

但是这似乎不起作用。

这同样适用于与开始的请求$ DOCUMENT_ROOT /公/ *,它需要转发到:$ DOCUMENT_ROOT /../公共/ *

我没有加入在index.php文件管理这包含/project_folder/index.php的/ project_folder/root /文件夹。对于公用文件夹,我创建了一个符号链接。我可能可以通过为位置/ public /添加一个别名来解决这个问题,但是我试图保持我的配置尽可能通用。

我试图阻止将project_folder设置为根文件夹,因为它有时包含我不希望从网络上访问的文件。介绍'根'文件夹是新的,但我试图尽可能有效地做到这一点。现有的Web项目还没有根文件夹。

正是我想要做的事情,我将如何能够实现这一点。

在此先感谢。

回答

2

通常PHP文件是由location ~ \.php$块(或类似的)处理的。我假设index.php不是您的应用程序中唯一的PHP文件,并且要处理/root/目录结构中的PHP文件,该位置将需要使用root /project_folder/root

对于开始/public的URI,您可以指定一个不同的root,并使用指定的位置来执行超出根目录的index.php文件。

事情是这样的:

root /project_folder/root; 

location/{ 
    try_files $uri $uri/ @index; 
} 

location /public { 
    root /project_folder; 
} 

location @index { 
    include fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME /project_folder/index.php; 
    fastcgi_pass ...; 
} 

location ~ \.php$ { 
    try_files $uri =404; 

    include fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    fastcgi_pass ...; 
} 
+0

这个例子给了我很多的工作。我设法删除了公共符号链接,并且还设法在指定位置的帮助下删除索引文件。谢谢! –