【发布时间】:2014-01-17 12:49:36
【问题描述】:
我有一个简单的语句来检查$_SERVER['HTTP_HOST'] 是否返回变量$C['ST__URL'] 的相同值。如果不是,它会执行 301 重定向。
今天我们遇到了停机,因为$_SERVER['HTTP_HOST'] 与$C['ST__URL'] 变量不匹配。
停机是由于强制 301 重定向陷入连续循环造成的,所以原因一定是 $_SERVER['HTTP_HOST'] 未被识别。
$C['ST__URL'] 已正确填充,所以我想知道停机时间的原因是什么? Apache 临时问题? DNS 区域中的不同配置?
$url = parse_url($C['ST__URL']);
if($_SERVER['HTTP_HOST']!=$url['host']) {
header('HTTP/1.1 301 Moved Permanently');
header('Location: '.$C['ST__URL'].$_SERVER['REQUEST_URI']);
}
【问题讨论】:
-
您是否尝试对每个变量进行 var_dump 以查看它们包含的内容?
-
好吧,如果客户端没有随请求发送主机名,而是通过 IP 到达服务器,您将不会获得 HTTP_HOST。至于你所说的“停机时间”,你到底是什么意思? “普通”HTTP 客户端在取消请求之前只是遵循一定数量的重定向,我看不出单个客户端不发送主机头会如何导致“停机”(除非您忽略了某些特殊情况)。
-
你基本上是在说:我不知道发生了什么,我怎样才能让它不再发生。首先弄清楚发生了什么,然后解决它。另外:你为什么需要这个。正如您所展示的,这是随机出现的危险代码。如果需要,请提供标题(可能是在您填写 st__URL 的那一刻?)。
标签: php apache http-status-code-301