Django返回HTTP 301?

时间:2009-10-16 19:08:36

标签: django curl libcurl

我有一个django视图,它在curl请求中返回HTTP 301:

grapefruit:~ pete$ curl -I http://someurl
HTTP/1.1 301 MOVED PERMANENTLY
Date: Fri, 16 Oct 2009 19:01:08 GMT
Server: Apache/2.2.9 (Win32) mod_wsgi/2.5 Python/2.6.2 PHP/5.2.6
Location: http://someurl
Content-Type: text/html; charset=utf-8

我无法从curl获取页面内容。但是,如果我使用浏览器访问该页面,我会按预期看到该内容。

有什么想法吗?

谢谢, 皮特

4 个答案:

答案 0 :(得分:150)

您可能正在请求没有尾部斜杠的URL,并且在settings.py中将APPEND_SLASH设置为True(默认值),因此Django会重定向到包含斜杠的URL。

答案 1 :(得分:4)

我的问题是PREPEND_WWW,在localhost中使用它时会返回301错误,我刚刚创建了一个本地设置文件并将其设置为PREPEND_WWW = False

答案 2 :(得分:1)

就我而言,在settings.py文件上评论 SecurityMiddleware 就可以了。我不得不说这只发生在运行runserver命令时(也称为测试时)。使用Apache时,它不属于重定向循环。

答案 3 :(得分:0)

所以对我来说,它是以下的组合:

  • SecurityMiddleware 已启用
  • SECURE_SSL_REDIRECT = True
  • 单独的 Web 服务器也启用了 SSL 重定向

在这种情况下,Web 服务器已经进行了重定向,并将请求通过 HTTP 转发到 Django,然后 Django 再次重定向到以无限循环结束的 HTTPS。

因此,在这种情况下,设置 SECURE_SSL_REDIRECT = False 是安全的。