2

一連のIPにロックダウンしようとしているワードプレスサイトがあります。index.phpの最初のものとして次のコードを使用しています:(ここで難読化されたIP)

$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 blog-header requireをコメントアウトし、代わりにrequireを単純なphpinfoページに含めると、リダイレクトは期待どおりに動作します。

PHPの処理が何らかの形で機能する方法を誤解していますか?確かに、以下の必要なファイルのロードを検討する前に、リダイレクトをヒットする必要がありますか?

編集:Windows IIS7バックエンド、PHPバージョン5.2.17、Wordpressバージョン3.4.2

4

2 に答える 2

0

適切なリダイレクトを行う場合は、header-directiveの後でスクリプトの実行を終了する必要があります。

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

その理由は、Wordpressに実行を継続させると、HTTPステータスコードが送信され、ブラウザがヘッダー200を無視するためです。LocationHTTPステータスコードのサブセットのみがLocationヘッダーを使用します。

配置すると、PHPは実行を停止し、 HTTPステータスexitを自動的に送信します。これにより、ヘッダーで指定されたURLにリダイレクトするようにブラウザーに指示されます。302Location

于 2012-09-21T05:41:22.333 に答える
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);
}

?>
于 2012-09-21T05:45:31.923 に答える