Heroku Django:将对www.的所有请求重定向到根域

Heroku Django:将对www.的所有请求重定向到根域,heroku,dns,Heroku,Dns,我需要将来自www.mysite.com的所有请求重定向到mysite.com 我已经找到了,但是如何在django/python中实现呢 唯一的解决办法,我可以罚款,这是由一个版主在戈达迪是上面。似乎我无法通过GoDaddy的DNS管理器解决此类问题 有什么提示或想法吗 提前感谢。解决此问题: from django.http import HttpResponsePermanentRedirect class WWWRedirectMiddleware(object): def p

我需要将来自
www.mysite.com
的所有请求重定向到
mysite.com

我已经找到了,但是如何在django/python中实现呢

唯一的解决办法,我可以罚款,这是由一个版主在戈达迪是上面。似乎我无法通过GoDaddy的DNS管理器解决此类问题

有什么提示或想法吗

提前感谢。

解决此问题:

from django.http import HttpResponsePermanentRedirect

class WWWRedirectMiddleware(object):
    def process_request(self, request):
        if request.META['HTTP_HOST'].startswith('www.'):
            return HttpResponsePermanentRedirect('http://mysite.com')

[PROJECT\u NAME]/middleware.py
中创建您自己的中间件,如下所示:

from django.conf import settings
from django.http import HttpResponsePermanentRedirect
from django.utils.deprecation import MiddlewareMixin


class RemoveWWWMiddleware(MiddlewareMixin):
    """
    Based on the REMOVE_WWW setting, this middleware removes "www." from the
    start of any URLs.
    """
    def process_request(self, request):
        host = request.get_host()
        if settings.REMOVE_WWW and host and host.startswith('www.'):
            redirect_url = '%s://%s%s' % (
                request.scheme, host[4:], request.get_full_path()
            )
            return HttpResponsePermanentRedirect(redirect_url)
然后,在项目的
设置.py
中:

  • 添加
    REMOVE\u WWW=True
  • 并添加
    [PROJECT_NAME].middleware。将wwwmiddleware
    删除到
    middleware
    列表中,在Django的SecurityMiddleware之后,最好在Django的通用中间件之前
  • 当然,还要确保没有设置
    PREPEND\u WWW=True

该中间件基于。

如果您同时运行本地开发服务器,您将如何使用该中间件?@alper使用if-not调试示例Jeff,非常感谢您——我为同一问题挣扎了几天,这解决了所有问题。谢谢这应该是可以接受的答案-我可以确认这个解决方案在Django==2.0.2时可以完美地工作。非常感谢,杰夫!我在DNS方面做这件事有困难。