NGINX将请求重写到根目录以外的文件

NGINX将请求重写到根目录以外的文件,nginx,configuration,structure,Nginx,Configuration,Structure,目前,我正在使用以下目录结构(简化)运行WebProject: 项目文件夹/ 公开的/ 根/ index.php 我要做的是将服务器块中的根设置为: root /project_folder/root/; 但是当请求位置不存在时,我希望它将请求转发到project_folder/index.php。我尝试了以下方法: try_files $uri ../index.php?$query_string; 但这似乎不起作用 同样,以$document_root//public/*开头的请

目前,我正在使用以下目录结构(简化)运行WebProject:

  • 项目文件夹/
    • 公开的/
    • 根/
    • index.php
我要做的是将服务器块中的根设置为:

root /project_folder/root/;
但是当请求位置不存在时,我希望它将请求转发到project_folder/index.php。我尝试了以下方法:

try_files $uri ../index.php?$query_string;
但这似乎不起作用

同样,以$document_root//public/*开头的请求也需要转发到$document_root//public/*

我确实通过在/project_文件夹/root/文件夹中添加index.php来管理它,其中包括/project_文件夹/index.php。对于公用文件夹,我创建了一个符号链接。我可能可以通过为location/public/添加一个别名来解决这个问题,但是我正在尽可能地保持配置的通用性

我试图阻止将project_文件夹设置为根文件夹,因为它有时包含我不希望从web访问的文件。引入“root”文件夹是新的,但我正试图尽可能高效地实现这一点。现有的WebProject还没有根文件夹

我想做的是可能的,我怎样才能做到这一点


提前感谢。

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

您可以为以
/public
开头的URI指定不同的
,并使用命名位置执行out of 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 ...;
}

添加别名很简单:

location /public {
   alias /absolute/path/to/public;
}

这个例子给了我很多东西。我设法删除了公共符号链接,还设法在命名位置的帮助下删除了索引文件。非常感谢。