PHP的$_SERVER['HTTP_HOST']获取服务器地址功能详解,$_SERVER['HTTP_X_FORWARDED_HOST']

uchome的index文件中的二级域名功能判断,使用了php的$_SERVER['HTTP_HOST'],开始对这个不是很了解,因此百度了一下,发现一篇帖子有点意思,转发过来作个记录。php

在php中,咱们通常经过$_SERVER['HTTP_HOST']来活得URL中网站的域名或者ip地址。php框架

php手册中的解释以下:
 

“HTTP_HOST”
当前请求的 Host: 头信息的内容。 
服务器

通常来讲,这样子不会遇到什么问题,在一些常见的php框架中,如PFC3和FLEA也是基于该预约义变量。框架

然而最近在作的一个项目,程序移交到客户手里测试时,居然发现程序的跳转老是会出错。测试

最后找出缘由:$_SERVER['HTTP_HOST']在客户的环境里,取得的值老是程序所在的服务器在其局域网内的ip值。网站

究其缘由,是由于,客户的公司经过一台服务器链接至因特网,而咱们的程序所在的服务器,是经过域名映射出来的,也就是中间有个“代理”的过程。所以$_SERVER['HTTP_HOST']在这样的环境里,取得的值老是程序所在的服务器在其局域网内的ip值。spa

最后查了很多资料,在symfony框架里面,找到替代的实现方法:代理

将$host = $_SERVER['HTTP_HOST'];code

替换成:symfony

$host = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '');

便可。

相关文章
相关标签/搜索