Получить доменное имя из запроса django

У меня был сайт с доменом www.example1.com, а недавно я указал другой домен DNS www.example2.com на тот же сервер, который содержит www.example1.com, так что оба www.example1.com а также www.example2.com обслуживает один и тот же код, но доменное имя должно отличаться, и я хочу получить доменные имена из запроса django, как показано ниже

def homepage(request):
    domain = request.META['HTTP_HOST']
    if domain == 'www.example1.com':
       return HTTPResponseReredirect('/new/')
    elif domain == 'www.example2.com':
       return HTTPResponseReredirect('/old/')

Поэтому, основываясь на доменном имени, я хочу перенаправить пользователя на разные веб-страницы, но каждый раз, когда я использовал request.META['HTTP_HOST'] вывод был IP-адрес 127.0.0.1:8001 как показано ниже

META:{'HTTP_ACCEPT': ‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8’,

'HTTP_ACCEPT_ENCODING': 'gzip, deflate, sdch, br',
'HTTP_ACCEPT_LANGUAGE': 'en-US,en;q=0.8',
'HTTP_CONNECTION': 'close',
'HTTP_COOKIE': 'sessionid=xxxxxxxxxxxxxxxx; ',
'HTTP_HOST': '127.0.0.1:8001',
'HTTP_UPGRADE_INSECURE_REQUESTS': '1',
'HTTP_USER_AGENT': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
'PATH_INFO': u'/',
'QUERY_STRING': '',
'RAW_URI': '/',
'REMOTE_ADDR': '127.0.0.1',
'REMOTE_PORT': '41280',
'REQUEST_METHOD': 'GET',
'SCRIPT_NAME': u'',
'SERVER_NAME': '127.0.0.1',
'SERVER_PORT': '8001',
'SERVER_PROTOCOL': 'HTTP/1.0',
'SERVER_SOFTWARE': 'gunicorn/19.0.0',

Но как получить реальное доменное имя?

2 ответа

request.META['HTTP'] показывает текущее доменное имя на сервере или IP-адрес, если доменное имя не связано.


Например, у меня есть эта функция в моем проекте

def test(request):
   return HttpResponse("{}".format(request.META['HTTP_HOST']))
  1. Что показывает тестовая функция на локальном сервере

    введите описание изображения здесьвведите описание изображения здесь

Я предполагаю, что вы тестируете свой код на локальном сервере, поэтому вы выводите 127.0.0.1:8001. Если вы установите доменное имя для вашего сервера, я думаю, что все будет работать:)

Вы используете nginx перед gunicorn?

Согласно этим двум SO-вопросам здесь и здесь, в вашем запросе указан неверный HTTP_HOST.META настоятельно рекомендует неверно конфигурировать вашу конфигурацию nginx.

Соответствующий ответ из обоих постов:

Похоже на proxy_set_header Host $http_host следует изменить на proxy_set_header Host $host а также server_name должен быть установлен соответственно на адрес, используемый для доступа к серверу.

Другие вопросы по тегам