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,827
  • 9
  • 60
  • 98
dynamic
  • 46,985
  • 55
  • 154
  • 231

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
  • 48,414
  • 8
  • 88
  • 101
  • 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
1

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,520
  • 24
  • 29