Django Request URL becomes weird
我在本地主机上运行了一个django项目,它运行得很好,但是当我将其上传到真实服务器时,URL出现了一些问题。每当HttpResponseRedirect或任何重定向被称为
时,它都会发生
本地主机上的页面
1 | http://127.0.0.1:8000/signin |
在服务器上时变为
1 | http://xyz.com,%20xyz.com/signin |
在萤火虫中,我看到了
1 2 | GET signin 301 MOVED PERMANENTLY GET signin http://xyz.com,%20xyz.com/signin |
我相信这是因为urls.py在settings.py中具有^ signin / $ ^和APPEND_SLASH = True,因为当我访问/ signin /时它起作用了!
我的本地主机上的
404页面
1 | Request URL: http://127.0.0.1:8000/test |
在服务器上
1 | Request URL: http://xyz.com,%20xyz.com/test |
由于某种原因,它在网址中添加了[逗号] [空格]并对其进行了重定向。
主页正常运行
在以下票证中跟踪了该问题:
https://code.djangoproject.com/ticket/11877
这与Django处理代理重定向的方式有关。以下中间件将帮助您。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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服务器也进行代理,则标头将包含列表的列表(以逗号分隔)。代理地址。通过使用此中间件,它将剥离标头中除一个代理地址以外的所有地址。
这可能不是一个答案,因为我正在与您一起使用同一应用程序,因此我对其进行了修复。
它与nginx有关以实现apache重定向,我们有