我有一个在我的localhost上运行的django项目,它运行得很好,但是当我将它上传到真实服务器时,一些问题开始发生在url上。每当HttpResponseRedirect或任何重定向被调用时都会发生这种情况
我本地主机上的一个页面
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.py在settings.py中有^ signin / $ ^和APPEND_SLASH = True,因为当我访问/ signin /它有效时!
我本地主机上的404页
Request URL: http://127.0.0.1:8000/test
在服务器上
Request URL: http://xyz.com,%20xyz.com/test
由于某种原因,它将[逗号] [空格]添加到网址并重定向。
主页正常运行
答案 0 :(得分: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-Forwarded-For标头中的代理信息的代理后面,然后您的Web服务器也进行代理,则标头将包含一个列表(以逗号分隔)代理地址。通过使用此中间件,它将删除标题中除一个代理地址之外的所有地址。
答案 1 :(得分:1)
这可能不是一个答案,因为我在同一个应用程序上与你合作,我修复了它。
它与nginx到apache重定向有关,我们有proxy_set_header Host $host;
,当我禁用它时,重定向工作没有错误。