Django的HttpResponseRedirect似乎剥离了我的子域名?

时间:2009-09-21 21:34:02

标签: django django-urls

每当我的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


有没有理由这样做?我是否应该重定向到包含子域的完整路径?

2 个答案:

答案 0 :(得分:4)

Django有一些它总是适用于响应的方法。其中之一是django.http.utils.fix_location_header。这可确保重定向响应始终包含绝对URI(根据HTTP规范的要求)。

此方法使用request.build_absolute_uri,后者又使用request.get_hostget_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/中的中间件。

干杯