2012-09-21 48 views
2

我有一個WordPress的網站我試圖鎖定到一組IP地址。我用下面的代碼中的index.php的第一件事:(這裏混淆IPS)Wordpress IP限制w /標題位置重定向

$matchedIP = 0; 
$IP = $_SERVER['REMOTE_ADDR']; 

$validIPs = array("x.x.x.x", "x.x.x.x", "x.x.x.x", "x.x.x.x", "x.x.x.x"); 

foreach($validIPs as $validIP) 
{ 
    if($IP == $validIP) 
    { 
     $matchedIP = 1; 
    } 
} 

if($matchedIP == 0) 
{ 
    header('Location: http://google.com.au'); 
} 

的IP檢查工作正常,如什錦斷言可以證實。不工作的是重定向,這從來不會發生。完整的index.php是如下:

<?php 

$matchedIP = 0; 
$IP = $_SERVER['REMOTE_ADDR']; 

$validIPs = array("x.x.x.x", "x.x.x.x", "x.x.x.x", "x.x.x.x", "x.x.x.x"); 

foreach($validIPs as $validIP) 
{ 
    if($IP == $validIP) 
    { 
     $matchedIP = 1; 
    } 
} 

if($matchedIP == 0) 
{ 
    header('Location: http://google.com.au'); 
} 

/** 
* Front to the WordPress application. This file doesn't do anything, but loads 
* wp-blog-header.php which does and tells WordPress to load the theme. 
* 
* @package WordPress 
*/ 

/** 
* Tells WordPress to load the WordPress theme and output it. 
* 
* @var bool 
*/ 
define('WP_USE_THEMES', true); 

/** Loads the WordPress Environment and Template */ 
require('./wp-blog-header.php'); 

//require('./phpinfo.php'); 

好奇的是,當評論了WordPress博客頭需要和包括需要一個簡單的phpinfo頁面,而不是,重定向行爲與預期相同。

我誤解了PHP的處理方式?它甚至會考慮在下面加載任何必需的文件之前它應該打到重定向?

編輯:視窗IIS7後端PHP版本5.2.17,WordPress版本3.4.2

+0

嘗試增加一個'出口(0);'了'header'指令之後。編輯:順便說一句,你可以通過使用['in_array'](http://php.net/manual/en/function.in-array.php)去除'foreach'-loop。 – vstm

+0

謝謝!這完全奏效!您應該將其作爲答案提交,以便將其標記爲已回答。 :) – Taz

回答

0

如果要作出正確的重定向,你必須終止header -directive後腳本執行:

if(!in_array($IP, $validIPs)) 
{ 
    header('Location: http://google.com.au'); 
    exit(0); 
} 

原因是,如果你讓Wordpress繼續執行,它會發送一個HTTP狀態碼200,瀏覽器將忽略Location標題。只有一部分HTTP狀態代碼使用Location標頭。

隨着地方exit,PHP停止執行,並會自動發送一個HTTP 302狀態,它告訴瀏覽器重定向到Location標題中指定的URL。

0

你並不需要一個for循環它

<?php 

$matchedIP = 0; 
$IP = $_SERVER['REMOTE_ADDR']; 

$validIPs = array("x.x.x.x", "x.x.x.x", "x.x.x.x", "x.x.x.x", "x.x.x.x"); 

if(in_array($IP, $validIPs)) 
{ 
    header('Location: http://google.com.au'); 
    exit(0); 
} 

?>