2011-08-29 80 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

这是原因,但如果你想通过传递正确的头信息,可以考虑使用中间件在我的答案。 –