2016-11-03 111 views
0

我被困在一個循環中。我正在使用金字塔> Nginx> AngularJS,這是我多年來一直使用的很棒的組合。但是,我想出了一個問題,試圖根據查詢字符串插入臨時重定向。這裏的請求的處理方式:Nginx路由AngularJS和HTML5Mode

  1. 瀏覽器請求http://foo.com/bar
  2. Nginx的檢測缺乏所需的查詢參數,並暫時重定向到另一個域(其中用戶在調查中填寫)
  3. 當用戶提交調查,他們將返回到Nginx,這次是查詢參數。如http://foo.com/bar?foo=bar
  4. Nginx的看到所需要的PARAM並將請求轉發到金字塔代理
  5. 金字塔拋出一個HTTPNotFound錯誤,這是我們想要的東西,並使用302重定向http://foo.com/#/bar?foo=bar。這樣,AngularJS將接管路由並停止向服務器發送請求。 ----這是問題發生的地方。在這一點上,用戶被重定向回調查,因爲Nginx忽略了散列之後的所有內容,當然,將它當作片段對待。不幸的是,這意味着查詢字符串消失了,Nginx再次應用調查重定向。

我改變了金字塔302通過移動哈希和/條段到查詢字符串的右側。這確實通過Nginx獲取查詢字符串,但是AngularJS不再解釋哈希值,也不應用/ bar路由。

我希望對某人有意義。任何線索將不勝感激。

回答

1

片段永遠不會發送到服務器,因此您無法在nginx中創建位置以對其作出反應。

如果重定向/着金字塔只發生,如果有「酒吧」,那麼你可以這樣做:

location =/{ 
    # deliver your angular app 
} 

location /bar { 
    # redirect or forward to Pyramid 
}