2015-01-31 36 views
1

我在我的日志中收到了来自wordpress的以下错误:“未定义索引:HTTP_HOST”。当然,该文件正在请求$ _SERVER ['HTTP_HOST'],但是如何通过Apache访问网站?我已通过var_dump验证此var是否存在并已设置。未定义的索引:wordpress中的HTTP_HOST

我想清除我的日志中的这个错误,也想知道如何做到这一点。我没有wordpress CLI cron,那可能是什么?我会指出这是一个随机的请求,会产生这个错误。当我浏览博客时不会发生。

这里是调用堆栈(... = /): 调用堆栈:

0) 17, 
1) ... var... www2... wordpress... wp-blog-header.php 16, 
2) ... var... www2... wordpress... wp-includes... template-loader.php 74, 
3) ... var... www2... wordpress... wp-content... themes... oneengine... page.php 1, 
4) get_header 45, 
5) locate_template 477, 
6) load_template 501, 
7) ... var... www2... wordpress... wp-content... themes... oneengine... header.php 134, 
8) wp_nav_menu 328, 
9) _wp_menu_item_classes_by_context 549 

回答

2

非法请求可能不包含它,所以它总是可能的。

最好的预防方法是在使用之前检查它是否存在,就像每个变量一样。

<?php 
if (array_key_exists('HTTP_HOST', $_SERVER) { 
    //use $_SERVER['HTTP_HOST'] 
} 
?> 

或者,因为这是一个非法的请求,你可以阻止它。

<?php 
if (!array_key_exists('HTTP_HOST', $_SERVER) { 
    if (!headers_sent()) { 
     $protocol = (isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0'); 
     header($protocol . ' 404 Not Found'); 
    } 

    echo '<h1>Not Found</h1>'; 
    exit; 
} 
?> 
+1

技术上讲,它仅在HTTP 1.1非法其中状态码应该是400如由[RFC2616-sec19.html#sec19.6.1.1](http://www.w3.org/陈述Protocols/rfc2616/rfc2616-sec14.html):“RFC所有基于Internet的HTTP/1.1服务器都必须响应400(错误请求)状态码给任何缺少Host头字段的HTTP/1.1请求消息。 – hexalys 2015-12-31 02:20:12

-2

这似乎,也许这是由于错误的请求。如果客户端不发送这个头文件,那么它在服务器上也不存在,尽管它是apache。必须来自脚本机器人。