ServerName在虚拟主机中设置,但是当我引用$_SERVER['SERVER_NAME']
时,我得到了请求标头中设置的内容。
我正在玩欺骗它,无论我将Host请求标头设置为服务器变量中填充的内容。
我认为它应该采用vhost中的任何内容,而另一个变量如$_SERVER['HTTP_HOST']
应该具有请求标头值。
如果vhost工作不正常而不仅仅使用请求标头,我希望设置一些虚拟值。
我应该研究一下apache配置设置吗?什么可能导致在服务器上发生这种情况?
我想依赖$_SERVER['SERVER_NAME']
的原因是为了安全性和可靠性,因此用户无法欺骗它,所以我们是那些设置它并在脚本编写过程中关闭它的人。
感谢。
答案 0 :(得分:1)
通过别名访问网站时未设置SERVER_NAME。
答案 1 :(得分:0)
是否有任何我应该研究的apache配置设置
我在comment中发现了一个有趣的PHP documentation,这意味着拥有实际的apache ServerName值是为了确保UseCanonicalName
apache目录已打开。
在带有ServerAlias指令的apache虚拟主机设置中使用$ _SERVER ['SERVER_NAME']变量时,请务必检查UseCanonicalName apache指令。如果为On,则此变量将始终具有apache ServerName值。如果它是Off,它将具有浏览器发送的标题给出的值。
我不确定这是否是您正在寻找的,但可能值得一试。
修改强>
(可能)与问题更相关:我发现someone遇到了与您类似的问题:
我在函数[...]中使用变量$ _SERVER ['SERVER_NAME']但我们可以在调用函数check_servname()之前修改$ _SERVER ['SERVER_NAME']的值。我正在寻找一个正确的服务器名称,而不是在调用check_servername之前可能已更改的服务器名称:
一个解决方案是在启动时定义一个超级全局变量(是的......讨厌但......),这些变量无法修改,因此通过引用超全局变量,您可以确保获得正确的值。
所以使用像
这样的东西define ( 'SERVER_NAME' , $_SERVER['SERVER_NAME'] );
一开始就应该通过引用SERVER_NAME
而不是$_SERVER['SERVER_NAME']
来解决您的问题。试一试。