10

好的,如果你去这里的文档: https ://docs.djangoproject.com/en/dev/topics/http/shortcuts/

并向下滚动查看redirect() 的最后一个示例,它说“默认情况下,redirect() 返回一个临时重定向。所有上述形式都接受一个永久参数;如果设置为True,将返回一个永久重定向:”

现在,临时重定向和永久重定向有什么区别?我正在使用它,以便当用户登录并通过身份验证时,将他重定向到登录页面。我应该改用 HttpResponseRedirect() 吗?使用 redirect() 而不是 HttpResponseRedirect() 有什么好处吗?

4

2 回答 2

11

只需在 Brandon 的帖子中添加一条关于您的问题的注释,两者之间有什么区别。临时重定向和永久重定向之间的主要区别在于第三方如何看待它。如果 Google 看到永久重定向,它可能会认为旧站点已消失,并会更新所有点击以直接访问新 URL。有人说谷歌支持永久重定向,因为垃圾邮件发送者经常使用临时重定向。

临时重定向的一种情况是,例如在您自己的站点上对链接到下载镜像/静态文件服务器的 URL 进行内部重写。在这种情况下,重定向站点可能会保持不变,而其他服务器地址可能会改变(例如,在最便宜的地方托管静态内容)。使用永久重定向可能会带来问题(想想您手机上的播客播放器会记住此类重定向并且在您移动静态文件服务器时无法识别它)。

于 2015-03-17T21:32:08.633 回答
8

有两种方法可以返回 301 永久重定向:

from django.shortcuts import redirect

def my_view(request):
    # some code here
    return redirect('/some/url/', permanent=True)

https://docs.djangoproject.com/en/1.5/topics/http/shortcuts/#redirect

或者:

from django.http import HttpResponsePermanentRedirect

    def my_view(request):
        # some code here
        return HttpResponsePermanentRedirect('/some/url')

https://docs.djangoproject.com/en/1.5/ref/request-response/#django.http.HttpResponsePermanentRedirect

于 2013-09-29T01:30:33.713 回答