每当我的django网站在视图对象中调用“HttpResponseRedirect”以重定向到另一个网址时,它就会剥离子网并返回主网站。我正在处理Django的SVN分支。这是一个例子:
#Request comes in as https://sub1.mydomain.com def view(request): return HttpResponseRedirect("/test_url") #The browser will actually get redirected to https://mydomain.com/test_url
有没有理由这样做?我是否应该重定向到包含子域的完整路径?
答案 0 :(得分:4)
Django有一些它总是适用于响应的方法。其中之一是django.http.utils.fix_location_header
。这可确保重定向响应始终包含绝对URI(根据HTTP规范的要求)。
此方法使用request.build_absolute_uri
,后者又使用request.get_host
。 get_host
尝试从HTTP_HOST
获取request.META
,然后回归使用SERVER_NAME
。
我的猜测是,您的服务器未提供HTTP_HOST
,而您的SERVER_NAME
设置为mydomain.com
。
希望现在你知道你在寻找什么,你可以运行一些测试来看看出了什么问题。
答案 1 :(得分:2)
HttpResponseRedirect将返回302状态代码并设置Location标头。网址解析器不会考虑子域名(请参阅http://code.djangoproject.com/ticket/8896)。您最好从头开始重构它(META上的HTTP_HOST)或者只使用http://thingsilearned.com/2009/01/05/using-subdomains-in-django/中的中间件。
干杯