【问题标题】:$_SERVER['HTTP_HOST'] not recognized$_SERVER['HTTP_HOST'] 无法识别
【发布时间】: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


【解决方案1】:

我会先查看 apache 请求日志。

您说“原因一定是 $_SERVER['HTTP_HOST'] 未被识别。”但您根本不知道,是吗?为什么不?你没有任何记录。既然您知道这是一个问题,请设置以在再次发生时记录它:

if($_SERVER['HTTP_HOST']!=$url['host']) {

    error_log("Invoking redirect: server host $_SERVER['HTTP_HOST'] mismatch with url $url.\r\n"),3,"/var/log/http301redirect.log");

    header('HTTP/1.1 301 Moved Permanently');
    header('Location: '.$C['ST__URL'].$_SERVER['REQUEST_URI']);
}

这只是一个示例消息,您可能需要为日志消息添加日期戳和自定义。

【讨论】:

    猜你喜欢
    • 2011-11-05
    • 1970-01-01
    • 2018-05-23
    • 2015-08-09
    • 2023-04-04
    • 2018-04-17
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    相关资源
    最近更新 更多