我想以下列方式使用nginx路由我的请求
site.com/admin -> admin/index.html
admin/js/assets.js // the route locations have individual assets
site.com/112dw -> dist/index.html // alphanumeric regex
dist/css/assets.css
我有以下nginx配置
server {
listen 80
root /usr/share/nginx/html;
location /admin {
//alias /usr/share/nginx/html/admin/;
try_files $uri /admin/index.html; // changed based on answer below
}
location ~* /[a-zA-Z0-9].*$ { // rest of the routes
add_header 'Access-Control-Allow-Origin' '*';
//alias /usr/share/nginx/html/dist/;
try_files $uri /dist/index.html;
}
}
在我将配置更改为使用try_files之后,我的静态资产没有被提供,因为HTML正在搜索上面的路径一个目录。有人能指点我正确设置吗?
答案 0 :(得分:0)
实现此目标的最简单方法是使用root /usr/share/nginx/html;
location =/admin {
try_files /admin/index.html =404;
}
location ~*^/[a-z0-9]+$ {
try_files /dist/index.html =404;
}
:
path
答案 1 :(得分:0)
您可以使用index
,try_files
或rewrite
指令将请求指向index.html
。
您不需要使用正则表达式位置作为默认位置。事实上,您在问题中定义的方式,从不咨询/admin
位置。
您应该使用root
而不是alias
(请参阅this document)。
有许多解决方案,可能取决于资源文件的解析方式。像这种模式的东西可能对你有用:
root /usr/share/nginx/html/dist;
location / {
try_files $uri /index.html;
}
location /admin {
root /usr/share/nginx/html;
try_files $uri /admin/index.html;
}