11

I don't know maybe it's a bug.

I have 2 virutalhosts on my server.

virtualhost1.com virtualhost2.com

if i open virtualhost1.com with port 80 (virtualhost1.com:80)

$_SERVER['HTTP_HOST']='virtualhost1.com';

but if i open virtualhost2.com:80

$_SERVER['HTTP_HOST']='virtualhost2.com:80'; // NOTE: with port number

Can I know why?

Stephen
  • 18,491
  • 9
  • 59
  • 98
dynamic
  • 45,586
  • 54
  • 150
  • 229

2 Answers2

21

The value of $_SERVER['HTTP_HOST'] is taken directly from the Host: HTTP request header. It appears the requesting client is filling it in that way.

I suggest using $_SERVER['SERVER_NAME'] instead as its value will be set from your virtual host config. However, as Flimm notes below, even the reliability of SERVER_NAME can still be dependent on server config (check out this answer for more info on that).

webbiedave
  • 47,388
  • 8
  • 87
  • 99
  • Note that it's a bit more complicated than that, `$_SERVER['SERVER_NAME']` can't always be trusted. [See this question](https://stackoverflow.com/questions/2297403/http-host-vs-server-name) – Flimm Nov 13 '15 at 10:25
2

Following function always return real host (user typed host) without port and it's almost reliable:

function getRealHost(){
   list($realHost,)=explode(':',$_SERVER['HTTP_HOST']);
   return $realHost;
}
MSS
  • 3,247
  • 23
  • 27