Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从django请求获取域名_Python_Django_Dns_Django Request - Fatal编程技术网

Python 从django请求获取域名

Python 从django请求获取域名,python,django,dns,django-request,Python,Django,Dns,Django Request,我有一个域名为www.example1.com的网站,最近我将另一个域名域名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.co

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

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

请求。META['HTTP']显示服务器上的当前域名,如果域名没有绑定,则显示IP地址


例如,我的项目中有此功能

def test(request):
   return HttpResponse("{}".format(request.META['HTTP_HOST']))
  • 在本地服务器上测试什么样的函数

  • 在域名为aut0parts.site的远程服务器上显示什么样的自我测试功能


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

    您在gunicorn面前使用nginx吗

    根据这两个SO问题,如果request.META中有一个错误的“HTTP_HOST”,则强烈建议对nginx配置进行错误配置

    两个员额的相关答复如下:

    好像
    proxy\u set\u header Host$http\u Host
    应更改为 应设置
    proxy\u set\u头主机$Host
    server\u name
    与用于访问服务器的地址相对应


    不,我直接在服务器上测试,上面粘贴的输出来自服务器django http请求,这就是我感到困惑的地方,为什么它没有显示您在远程服务器上设置的域名?您的项目上的网址是什么?是的,我在combinationYep中使用nginx、gunicorn和supervisord,因此请检查nginx配置以确保每个域的http_主机都正确通过。