Nginx路由AngularJS和HTML5Mode

时间:2016-11-03 00:38:11

标签: angularjs nginx

我陷入了困境。我正在使用金字塔> Nginx> AngularJS这是一个很棒的组合我多年来一直在使用。但是,我遇到了一个问题,试图根据查询字符串插入临时重定向。以下是处理请求的方式:

  1. 浏览器请求http://foo.com/bar
  2. Nginx检测到缺少必需的查询参数,并暂时重定向到另一个域(用户填写调查表)
  3. 当用户提交调查时,他们会通过查询参数发送回Nginx。例如http://foo.com/bar?foo=bar
  4. Nginx查看所需的参数并将请求转发给金字塔代理
  5. Pyramid会抛出HTTPNotFound错误,这是我们想要的,并使用302重定向到http://foo.com/#/bar?foo=bar。这样,AngularJS将接管路由并停止向服务器发送请求。 ----这就是问题发生的地方。此时,用户正被路由回调查,因为Nginx忽略了哈希之后的所有内容,并将其视为片段,当然。不幸的是,这意味着查询字符串消失了,Nginx再次应用调查重定向。
  6. 我通过将哈希和/ bar段移动到查询字符串的右侧来改变Pyramid 302。这确实可以通过Nginx正确获取查询字符串,但是AngularJS不再解释哈希值,也不会应用/ bar路径。

    我希望这对某人有意义。任何线索都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

片段永远不会发送到服务器,因此您无法在nginx中创建位置以对其做出反应。

如果只有有' bar'重定向/转发到金字塔,那么你可以这样做:

location = / {
  # deliver your angular app
}

location /bar {
   # redirect or forward to Pyramid
}