301 在 Django 中重定向 www 子域

Posted

技术标签:

【中文标题】301 在 Django 中重定向 www 子域【英文标题】:301 Redirect Within Django for www Subdomain 【发布时间】:2013-12-21 03:37:53 【问题描述】:

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

【问题讨论】:

【参考方案1】:

只需返回一个重定向案例,该请求是针对裸域发出的。

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

如果您使用基于类的视图,您可以将其设置为装饰器或将其放在基类中,但如果您在网络服务器级别处理此重定向,性能会更好。

您正在使用 PaaS 提供商,这是一个常见的用例,他们都有,请咨询他们的服务台。

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

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

【讨论】:

以上是关于301 在 Django 中重定向 www 子域的主要内容,如果未能解决你的问题,请参考以下文章

乘客(Ruby on Rails)中的301重定向从根域到www子域?

301从主域(www和非www)重定向到子域

在 PHP 中重定向子域和域的非标准情况

您如何在 ColdFusion 中重定向并控制状态码(即 301 而不是 302)

Apache环境中重定向301的配置

如何在 Django 中重定向(包括 URL 更改)?