【发布时间】:2017-08-28 14:30:05
【问题描述】:
我有一个基于 NodeJS + Express / AngularJS 的 webapp。
AngularJS $routeProvider 处于 html5 模式,这意味着 URL 中没有 index.html 和 #。
我想用 nginx 来:
- 代理
/api到我的 NodeJS 应用程序 - 将
/中的所有请求重定向到/index.html - 将
/app中的所有请求重定向到/app/index.html
示例
-
/support:/应该重写为index.html,然后 angular $routeProvider 处理support路由并渲染SupportController -
/app/login:/app/应该重写为/app/index.html,然后角度$routeProvider 处理login路由并渲染LoginController -
/api/auth/login:/api/*应该始终被代理重定向到http://localhost:3000/,因为在/api下没有静态文件可服务
约束
问题是,使用类似这样的东西重定向到 API:
location / {
try_files $uri @backend;
}
不兼容 AngularJS 的 index.html 重写:
location / {
try_files $uri $uri/ /index.html =404;
}
location /app/ {
try_files $uri $uri/ /app/index.html =404;
}
如果我指定/api 位置,Nginx 会用/ 位置覆盖它...
我可以在这里做什么?
【问题讨论】:
-
你为什么在
$之前是\\?他们不需要 -
是的,我删除了它们,因为我从我的 bash 脚本中复制,所以需要在其中转义