每当我的django站点在视图对象中调用"HttpResponseRedirect"以重定向到另一个URL时,它会剥离子域并返回主站点 . 我正在处理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 回答
Django有一些它总是适用于响应的方法 . 其中一个是
django.http.utils.fix_location_header
. 这可确保重定向响应始终包含绝对URI(根据HTTP规范的要求) .此方法使用
request.build_absolute_uri
,后者又使用request.get_host
.get_host
尝试从request.META
获取HTTP_HOST
,回退到使用SERVER_NAME
.我的猜测是你的服务器没有提供
HTTP_HOST
并且你的SERVER_NAME
设置为mydomain.com
.希望现在你知道你在寻找什么,你可以运行一些测试来看看出了什么问题 .
HttpResponseRedirect将返回302状态代码并设置Location头 . url解析器不会考虑子域(请参阅http://code.djangoproject.com/ticket/8896) . 您最好从头开始重构它(META上的HTTP_HOST)或者只使用http://thingsilearned.com/2009/01/05/using-subdomains-in-django/中的中间件 .
干杯