2015-01-31 40 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。必須來自腳本機器人。