Django 返回 HTTP 301?

我有一个 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 获得页面内容。但是,如果我使用浏览器访问该页面,我会看到预期的内容。

有什么想法吗?

谢谢, 皮特

38955 次浏览

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

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

在我的例子中,在 settings.py文件上注释 安全中间件就可以解决这个问题。我不得不说,这只有在运行 runserver命令(也就是。测试时)。对于 Apache,它不属于重定向循环。

所以对我来说,是以下几点的结合:

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

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

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

当使用邮递员一切工作正常,但当我要求它从前端我得到了301错误。你可能错过了 url 的尾部斜杠,我遇到了同样的问题,我通过将斜杠添加到 url 中来解决它... ..。

是的,请检查网址,你可能会错过 斜杠在某处。 我通过在 URL 末尾添加斜杠来修复这个问题