2011-08-29 75 views
1

我有我的本地主機上運行一個Django項目,它工作得很好,但是當我上傳到後臺服務器,一些問題開始與URL發生。它發生的每一次HttpResponseRedirect或重定向被稱爲Django的請求URL變得怪異

頁面我的本地主機上

http://127.0.0.1:8000/signin 

,同時在服務器上成爲

http://xyz.com,%20xyz.com/signin 

的螢火我看到

GET signin 301 MOVED PERMANENTLY 
GET signin http://xyz.com,%20xyz.com/signin 

我相信這是因爲urls.p你在settings.py中有^ signin/$ ^和APPEND_SLASH = True,因爲當我訪問/登錄/它工作!我的本地主機

Request URL: http://127.0.0.1:8000/test 


404頁服務器

Request URL: http://xyz.com,%20xyz.com/test 

由於某種原因,它被添加[逗號] [空格]到URL並重定向它。


首頁工作沒有問題

回答

3

問題被跟蹤在以下機票:
https://code.djangoproject.com/ticket/11877

它使用Django如何處理代理重定向做。以下中間件將幫助你。

class MultipleProxyMiddleware(object): 
    FORWARDED_FOR_FIELDS = [ 
     'HTTP_X_FORWARDED_FOR', 
     'HTTP_X_FORWARDED_HOST', 
     'HTTP_X_FORWARDED_SERVER', 
    ] 

    def process_request(self, request): 
     """ 
     Rewrites the proxy headers so that only the most 
     recent proxy is used. 
     """ 
     for field in self.FORWARDED_FOR_FIELDS: 
      if field in request.META: 
       if ',' in request.META[field]: 
        parts = request.META[field].split(',') 
        request.META[field] = parts[-1].strip() 

如果,例如,你的Django的網站是坐在後面的代理,其中包括在X - 轉發,對於頭部代理信息,然後您的Web服務器也做代理,該頭將包含一個列表(逗號分開)代理地址。通過使用這個中間件,它將除去標題中的一個代理地址。

1

,因爲我與你在同一個應用程序的工作它可能不是一個答案,我固定它。

它有什麼用nginx的做apache的重定向,我們有proxy_set_header Host $host;,當我禁用它重定向工作沒有錯誤。

+0

這是原因,但如果你想通過傳遞正確的頭信息,可以考慮使用中間件在我的答案。 –