首页 文章

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

提问于
浏览
1

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

  • 4

    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 .

    希望现在你知道你在寻找什么,你可以运行一些测试来看看出了什么问题 .

  • 2

    HttpResponseRedirect将返回302状态代码并设置Location头 . url解析器不会考虑子域(请参阅http://code.djangoproject.com/ticket/8896) . 您最好从头开始重构它(META上的HTTP_HOST)或者只使用http://thingsilearned.com/2009/01/05/using-subdomains-in-django/中的中间件 .

    干杯

相关问题