Nginx 位置

Nginx locations

我正在 React 中开发一个多租户应用程序,一些客户想要将 .html 文件上传到项目的根目录以使用 google 控制台和类似的东西。我不希望所有这些文件都与应用程序代码混合,所以除了以下代码:

location / {
   try_files $ uri /index.html = 404;
}

我想在 NGINX 中添加一个位置块,它允许我将以 / 开头的任何其他 .html 文件转移到另一个文件夹,不包括像 /static/example.[=26= 这样的情况].

示例:

/               -> React default
/static/*.html  -> React default
/*.html         -> Derive to new folder

我将不胜感激这方面的任何帮助。

我试过这样的东西...

location /*.html {
    root /extras_folder;
}
location / {
    root /project_folder;
    try_files $uri /index.html =404;
}

但不起作用

这个呢?

server {
        listen 80;
        root /project_folder;

        location / {
                try_files $uri @extras_folder;
        }

        location @extras_folder {
                root /extras_folder;
                try_files $uri @index_html;
        }

        location @index_html {
                try_files /index.html =404;
        }
}

这首先在 /project_folder 中查找,然后在 /extras_folder 中查找,如果仍未找到文件,则最终提供 /project_folder/index.html(如果该文件不存在,则为 404)。 在这种情况下,您会将上传的文件放入 /extras_folder

这符合您描述的规则:

    location ^~ /index.html {
        root /project_folder;
        try_files $uri /index.html =404;
    }

    location ~ ^/[^/]+\.html {
        root /extras_folder;
        try_files $uri /index.html =404;
    }

    location / {
        root /project_folder;
        try_files $uri /index.html =404;
    }
  • 第二个块是仅在根路径中的 *.html 上的正则表达式匹配
  • 第三块用于所有其他路径
  • 第一个块是覆盖 / 的边缘情况 /index.html - 否则正则表达式规则总是优先于路径位置块