我有一个目录/文件结构,例如:
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。
答案 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。