Python 如何在Django中向访问者显示已移动的网页并返回301重定向HTTP响应状态代码?

Python 如何在Django中向访问者显示已移动的网页并返回301重定向HTTP响应状态代码?,python,django,http,redirect,http-headers,Python,Django,Http,Redirect,Http Headers,当网页移动到新位置时,如何显示移动的网页并在中返回301永久重定向HTTP响应状态代码?您不能 301是由浏览器直接作用的HTTP返回代码。许多站点处理这两个问题的方法是,首先将用户发送到一个重定向er页面,该页面告知用户更改,然后在X秒后将其发送到新页面。但是重定向er页面必须有200代码 一个小的变体是检测搜索引擎爬行器(通过IP和/或用户代理),并给它们301。这样,搜索结果将指向您的新页面 from django import http return http.HttpRe

当网页移动到新位置时,如何显示移动的网页并在中返回301永久重定向HTTP响应状态代码?

您不能

301是由浏览器直接作用的HTTP返回代码。许多站点处理这两个问题的方法是,首先将用户发送到一个重定向er页面,该页面告知用户更改,然后在X秒后将其发送到新页面。但是重定向er页面必须有200代码

一个小的变体是检测搜索引擎爬行器(通过IP和/或用户代理),并给它们301。这样,搜索结果将指向您的新页面

   from django import http

   return http.HttpResponsePermanentRedirect('/yournewpage.html')
浏览器将获得301,并按预期转到
/yournowpage.html
。另一个答案在技术上是正确的,因为python本身不处理重定向,而浏览器处理重定向。这就是引擎盖下发生的事情:

Browser             Python         HTTP
   ------------------->            GET /youroldpage.html HTTP/1.1

   <-------------------            HTTP/1.1 301 Moved Permanently
                                   Location: /yournewpage.html
   ------------------->            GET /yournewpage.html HTTP/1.1
Browser-Python-HTTP
------------------->获取/yourldpage.html HTTP/1.1
获取/yournowpage.html HTTP/1.1

您实际上可以在301或其他重定向中返回HTML页面。它将由太旧的用户代理渲染,无法理解结果-即HTTP/0.9浏览器,它几乎不存在了。我不知道!当然,我并不担心浏览器那么旧,但这还是很有趣的。