为什么需要 `try_files` 才能使 `root` 指令起作用?

为什么需要 `try_files` 才能使 `root` 指令起作用?

我在让 nginx 找到前端的静态文件时遇到了麻烦,我添加了一条看似同义反复的try_files指令,这使得一切正常。

  location /frontend {
      try_files $uri /;
  }

  root {{ static_root }};
  index /frontend/index.html;

  location / {
      rewrite ^.*$ /frontend/index.html break;
  }

我的问题是:如果没有第一个指令,为什么这不起作用location /frontend

答案1

rewrite是不加区别的,它适用于每个请求(甚至.css文件.js)。通过添加单独的locationURI,/frontend可以防止以 开头的 URI 被随意使用rewrite

您可能可以通过以下方式获得类似的结果:

root /path/to/root;

location / {
    try_files $uri $uri/ /frontend/index.html;
}

这个文件了解更多。

相关内容