Django-hosts перенаправляет форму без www на www

Сайт генерирует различные URL-адреса, которые выглядят как http://example.com/'somepath'. Я хочу перенаправить пользователей с http://example.com/'somepath' на http://www.example.com/'somepath'. Как я узнал, это можно сделать с помощью django-hosts.
Как сказано в инструкции, у меня в settings.py есть следующее:

ALLOWED_HOSTS = ['www.example.com', 'example.com']

INSTALLED_APPS = [
   ...,
   'django_hosts',
]

MIDDLEWARE = [
   'django_hosts.middleware.HostsRequestMiddleware',
   ...
   'django_hosts.middleware.HostsResponseMiddleware',
]

ROOT_URLCONF = 'appname.urls'
ROOT_HOSTCONF = 'appname.hosts'
DEFAULT_HOST = 'www'
DEFAULT_REDIRECT_URL = "http://www.example.com"
PARENT_HOST = "example.com"

В hostsconf/urls:

from django.conf.urls import url
from .views import wildcard_redirect

urlpatterns = [
    url(r'^(?P<path>.*)', wildcard_redirect),
]

В hostsconf/views:

from django.conf import settings
from django.http import HttpResponseRedirect

DEFAULT_REDIRECT_URL = getattr(settings, "DEFAULT_REDIRECT_URL", "http://www.example.com")

def wildcard_redirect(request, path=None):
    new_url = DEFAULT_REDIRECT_URL
    if path is not None:
        new_url = DEFAULT_REDIRECT_URL + "/" + path
    return HttpResponseRedirect(new_url)

Но похоже, что это не работает, потому что если я перейду на http://example.com/'somepath', он возвращает "400 Bad Request" и http://www.example.com/'somepath' указывает на правильный пункт назначения. Что я делаю неправильно?


person Steve    schedule 29.11.2016    source источник


Ответы (1)


Попробуйте использовать настройки по умолчанию PREPEND_WWW.

https://docs.djangoproject.com/en/1.10/ref/settings/#prepend-www

person dd42    schedule 29.11.2016
comment
и что вы получаете в этом? 400 вы можете получить, если не установить ALLOWED_HOSTS, вы уверены, что сделали это? показать обратную связь удали django-hosts, он не хотел перенаправлять на www - person dd42; 29.11.2016
comment
Я установил allow_hosts, и PREPEND_WWW возвращает ту же ошибку 400 Bad Request. - person Steve; 29.11.2016
comment
показывать трассировку, но не код ошибки, т.к. нужно найти где и почему возникла ошибка, смотрите логи - person dd42; 30.11.2016