单页面应用程序和嵌套目录的Nginx配置

时间:2017-09-17 08:11:41

标签: nginx

我有一个目录/文件结构,例如:

root/
  a/
    utils.js
  b/
    assets/
      styles.css
      app.js
    index.html

我想配置nginx直接提供a目录中的文件(如果存在)并且在目录b中有单页应用程序(如果路径中存在文件,则将直接提供,如果不存在,则为nd)后备将以index.htm文件结束。

例如:

  • myapp.com/a/utils.js将返回该文件。
  • myapp.com/b/myapp.com/b/foo会显示index.html
  • myapp.com/b/assets/style.css将直接返回css文件

到目前为止,我尝试了多种不同的配置,并且没有使用过。例如,最简单的:

server {
    listen 80;

    root /root;
    index index.html;

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

我也试着为不同的目录提供服务:

server {
    listen 80;

    root /root;
    index index.html;

    location /a {
        try_files $uri $uri/ =404;
    }

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

我也试图定义不同的根:

server {
    listen 80;

    index index.html;

    location /a {
        root /root/a;
        try_files $uri $uri/ =404;
    }

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

Nginx似乎忽略了现有文件,最终总是返回404页面。当我尝试直接访问现有文件时,它会被重定向到/(root)url。

1 个答案:

答案 0 :(得分:0)

WebGL2语句的最后一个参数是默认操作。只能有一个。你的许多例子有两个。有关详细信息,请参阅this document

try_files文件的正确URI为index.html,这是您需要用于/b/index.html语句的默认操作的内容。

这应符合您的要求:

try_files

您没有说明URI location / { try_files $uri $uri/ /b/index.html; } 会发生什么。在上述情况下,它也会返回/a/foo。如果您需要它来返回404响应,您可以使用:

index.html

有关详情,请参阅this document