Heroku Django: перенаправить все запросы на www. к корневому домену

Мне нужно перенаправить все запросы от www.mysite.com до mysite.com

Я нашел решение в rails, но как я могу это сделать в django/python?

Единственное решение, которое я мог бы оценить, которое было опубликовано модератором на GoDaddy, было выше. Похоже, я не могу решить эту проблему через диспетчер DNS GoDaddy.

Любые подсказки или мысли?

Спасибо заранее.

Ответ 1

Решено, что это:

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')

Ответ 2

Создайте собственное промежуточное ПО в [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)

Затем в вашем проекте settings.py:

  • Добавить REMOVE_WWW = True
  • И добавьте [PROJECT_NAME].middleware.RemoveWWWMiddleware в список MIDDLEWARE, после Django SecurityMiddleware и предпочтительно перед Django Common Middleware.
  • Кроме того, конечно, убедитесь, что вы не установили PREPEND_WWW = True

Это промежуточное программное обеспечение основано на Django CommonMiddleware.