301重定向Django内的www子域

时间:2013-12-04 15:11:35

标签: python django redirect django-urls

我正在使用DNSimple和Heroku作为我的Python / Django应用程序,但无论有没有“www”都会访问该网站,并且基本上给了我两个不同的重复网站。我应该在我的应用程序中执行重定向表单来解决此问题。如何在Django中创建从“www”到“www”的301重定向?

1 个答案:

答案 0 :(得分:1)

只需返回针对裸域请求的重定向情况。

if not request.META.get('HTTP_HOST', '').startswith('www'):
    return HttpResponseRedirect(
               'http://www.example.com/' + request.get_full_path()
           )

如果使用基于类的视图,可以使它成为装饰器或将其放在基类上,但如果在Web服务器级别处理此重定向,性能会更好。

您正在使用PaaS提供商,这是一个常见的用例,他们都覆盖了它,请求他们的服务台。

使用mod_rewrite执行此操作的方法有点偏离主题,因为它与编程无关;应该将这样的东西放在虚拟主机配置中:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^example\.com
RewriteRule ^(.*)$ http://www.example.com$1 [R=permanent,L]