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

bed*_*dre 3 dns heroku

我需要重定向所有的请求来自何处www.mysite.commysite.com

在rails中找到了解决方案,但是我怎么能在django/python中做到这一点?

我可以解决的唯一解决办法是由GoDaddy的主持人发布,如上所述.好像我无法通过GoDaddy的DNS管理器解决这类问题.

任何提示或想法?

提前致谢.

Jef*_*wen 7

创建自己的中间件[PROJECT_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)
Run Code Online (Sandbox Code Playgroud)

然后,在你的项目中settings.py:

  • REMOVE_WWW = True
  • 在Django的SecurityMiddleware之后,最好是在Django的Common Middleware之前添加[PROJECT_NAME].middleware.RemoveWWWMiddlewareMIDDLEWARE列表中.
  • 当然,还要确保你没有设置 PREPEND_WWW = True

这个中间件基于Django的CommonMiddleware.

  • 杰夫,非常感谢你这一点 - 我几天来一直在努力解决这个问题,这解决了一切.谢谢! (3认同)
  • 这应该是公认的答案-我可以确认该解决方案与Django == 2.0.2完美兼容。非常感谢,杰夫!我在从DNS端执行此操作时遇到了麻烦。 (2认同)