5

我有一个带域的网站www.example1.com,最近我将另一个域 dnswww.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',

但是如何获得实际的域名呢?

4

2 回答 2

2

request.META['HTTP'] 显示服务器上的当前域名,如果域名不绑定,则显示 IP 地址。


例如我的项目中有这个功能

def test(request):
   return HttpResponse("{}".format(request.META['HTTP_HOST']))
  1. 什么显示我在本地服务器上的测试功能

    在此处输入图像描述

  2. What show`s me test function on remote server with domain name aut0parts.site 在此处输入图像描述

我假设你在本地服务器上测试你的代码,这就是为什么你的输出是 127.0.0.1:8001。如果您将域名设置为您的服务器,我认为一切都会正常工作:)

于 2017-02-14T07:59:27.290 回答
2

你在gunicorn前面使用nginx吗?

根据此处此处的这两个 SO 问题,您的请求中有一个错误的“HTTP_HOST”。META 强烈建议您的 nginx 配置配置错误。

两个帖子的相关回复:

似乎 proxy_set_header Host $http_host应该更改为 proxy_set_header Host $hostserver_name应适当设置为用于访问服务器的地址。

于 2017-02-14T08:11:03.613 回答