フリーランス|WEB 制作経験丸7年、制作会社様からのご依頼に丁寧・高クオリティでお手伝いいたします。 IRODORI DESIGN

B L O G

【テクニック】特定のIPアドレス以外はリダイレクトさせる方法

.htaccess
IPアドレス
リダイレクト

例えばWEBサイトを新規作成している際、通常であれば正式公開までは一般ユーザーにURLが知られてアクセスされることは稀なことだと思います。
しかし、少しイレギュラーではありますが例えば先行してパンフレットや名刺などのURLを記載してしまっている場合、URLが知られて、開発中のURLにアクセスされてしまうという事が想定されます。
そのような時、一時的ではありますが自分やクライアント以外のアクセスは別のURLへ飛ばしたいですよね。
これはIPアドレスを指定することで実現可能です。
今回の記事では特定のIPアドレス以外からのアクセスの場合、別のURLへリダイレクトさせる方法を解説したいと思います。

特定のIPアドレス以外はリダイレクトさせる方法

特定のIPアドレ以外からのアクセスを別のURLへリダイレクトさせる方法は様々ありますが、この記事では.htaccessを使う方法と、PHPを使う方法の2パターンを解説します。

.htaccessを使う方法

まずは.htaccessを使う方法を解説します。
.htaccessを使う場合は以下のように書きます。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REMOTE_ADDR} !^000\.000\.000\.000$
    RewriteRule ^(.*)$ http://www.example.com/ [R=302,L]
</IfModule>

この記述の解説は

RewriteCond %{REMOTE_ADDR} !^000\.000\.000\.000$

この部分に自分のIPアドレスなど、アクセスを許可したいIPアドレスを書きます。
ちなみにアクセスを許可するIPアドレスを複数指定したい場合は以下のように書きます。

RewriteCond %{REMOTE_ADDR} !^000\.000\.000\.000$
RewriteCond %{REMOTE_ADDR} !^111\.111\.111\.111$

こうすることで複数のIPアドレスのアクセスを許可することが来ます。

続いて、特定のIPアドレス以外の場合のリダイレクト先となるURLを書きます。

RewriteRule ^(.*)$ http://www.example.com/ [R=302,L]

この2つの指定によって、自分以外、開発中のサイトを見られることを防ぐことが出来ます。
最後の[R=302,L]は一時的なリダイレクトを意味しています。
もしサイト引っ越しなどで永続的なリダイレクトをさせたい場合は[R=302,L]を[R=301,L]に変更する必要があります。

PHPを使う方法

続いて、PHPを使う方帆を解説します。
PHPを使う場合は以下のように書きます。

<?php
$allowed_ips = array('000.000.000.000');
$user_ip = $_SERVER['REMOTE_ADDR'];

if (!in_array($user_ip, $allowed_ips)) {
    header('Location: http://www.example.com/');
    exit;
}
?>

この記述の解説は

$allowed_ips = array('000.000.000.000');

この部分に自分のIPアドレスなど、アクセスを許可したいIPアドレスを書きます。
ちなみにアクセスを許可するIPアドレスを複数指定したい場合は以下のように書きます。

$allowed_ips = array('000.000.000.000','111.111.111.111');

こうすることで複数のIPアドレスのアクセスを許可することが来ます。

続いて、特定のIPアドレス以外の場合のリダイレクト先となるURLを書きます。

header('Location: http://www.example.com/');

この2つの指定によって、自分以外、開発中のサイトを見られることを防ぐことが出来ます。

PHPを使う場合の注意点があります。
header関数を使用する場合、その前にはHTMLや空白、改行など、どんな記述もしてはいけません。
これは、HTTPヘッダーはどんな実際の出力よりも先に送信されるべきであるためです。

Warning: Cannot modify header information - headers already sent by (output started at xxx) in xxx on line xxx

header関数の前に何か出力などしているとこのようなエラーが発生します。
header関数のエラー解決方法は以下にて解説しています。

まとめ

今回の記事では特定のIPアドレス以外からのアクセスの場合、別のURLへリダイレクトさせる方法を解説してきました。
使用する場面は限られますが、長くWEB制作に携わっていると一度は出くわす場面だと思いますので是非覚えておきたい知識ですね。