Сайт генерирует различные 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' указывает на правильный пункт назначения. Что я делаю неправильно?