2

每当我的 django 站点在视图对象中调用“HttpResponseRedirect”以重定向到另一个 url 时,它都会剥离子域并返回到主站点。我在 Django 的 SVN 分支工作。这是示例:

#Request 以 https://sub1.mydomain.com 的形式出现
定义视图(请求):
  return HttpResponseRedirect("/test_url") #浏览器实际上会被重定向到https://mydomain.com/test_url


这样做有原因吗?我是否必须重定向到包括子域在内的完整路径?

4

2 回答 2

4

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

此方法使用request.build_absolute_uri,而后者又使用request.get_hostget_host尝试获取HTTP_HOSTfrom request.META,回退到 using SERVER_NAME

我的猜测是您的服务器没有提供HTTP_HOST并且您SERVER_NAME的设置为mydomain.com.

希望现在您知道要查找的内容,您可以运行一些测试以查看问题所在。

于 2009-09-22T05:17:13.463 回答
2

HttpResponseRedirect 将简单地返回带有 Location 标头集的 302 状态代码。url 解析器不会考虑子域(参见http://code.djangoproject.com/ticket/8896)。您最好的选择是从头开始重建它(META 上的 HTTP_HOST),或者只使用来自http://thingsilearned.com/2009/01/05/using-subdomains-in-django/的中间件。

干杯

于 2009-09-22T05:19:01.620 回答