【发布时间】:2010-11-30 05:32:18
【问题描述】:
每当我的 django 站点在视图对象中调用“HttpResponseRedirect”以重定向到另一个 url 时,它都会剥离子域并返回到主站点。我在 Django 的 SVN 分支工作。示例如下:
这样做有什么原因吗?我是否必须重定向到包含子域的完整路径?
【问题讨论】:
标签: django django-urls
每当我的 django 站点在视图对象中调用“HttpResponseRedirect”以重定向到另一个 url 时,它都会剥离子域并返回到主站点。我在 Django 的 SVN 分支工作。示例如下:
这样做有什么原因吗?我是否必须重定向到包含子域的完整路径?
【问题讨论】:
标签: django django-urls
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。
希望现在您知道自己在寻找什么,您可以运行一些测试来看看出了什么问题。
【讨论】:
request.is_secure,那么fix_location_header 在绝对重定向时会出错。
HttpResponseRedirect 将简单地返回带有 Location 标头集的 302 状态代码。 url 解析器不会考虑子域(请参阅http://code.djangoproject.com/ticket/8896)。您最好的选择是从头开始重建它(META 上的 HTTP_HOST)或仅使用来自 http://thingsilearned.com/2009/01/05/using-subdomains-in-django/ 的中间件。
干杯
【讨论】: