apacheの.htaccessでRemote_Hostが取得できない問題

契約しているレンタルサーバーのCOME-miniで.htaccessの設定をしていたところホスト名を使った処理がうまくいかないので原因を調べました。

Remote_Host

ホスト名はIPから逆引きして取得します。
例えば123.123.123.?23をwww.fugafuga.co.jpなどのホスト名に変えます。
通常はホスト名からIPを取得するところをIPからホスト名を取得するので逆引きと呼ばれています。
.htaccessでは「SetEnvIf Remote_Host」や「Require host」などで利用するときがあります。
このRemote_Hostはapacheで設定していないと利用できません。
具体的にはApacheのhttpd.confで設定します。
HostnameLookups Offになっていたら利用できません。
HostnameLookups Onにして再起動する必要があります。

HostnameLookupsの確認方法

Apacheのhttpd.confの設定変更できる環境ならそれでことは済みます。
ただレンタルサーバーなどで変更できない場合があります。
まずは設定を確認しましょう。
直接httpd.confを見なくても確認できます。
PHPで$_SERVER["REMOTE_HOST"]の中身を確認してください。
echo $_SERVER["REMOTE_HOST"];で表示できます。
echo $_SERVER["REMOTE_HOST"];
この$_SERVER["REMOTE_HOST"]はHostnameLookupsがOnの状態で機能します。
からっぽならHostnameLookups Offなので.htaccessでRemote_Hostを使うのはあきらめてください。

PHPでHOST名を取得する

$_SERVER["REMOTE_HOST"]が使えるのならばそれで問題ないです。
HostnameLookupsがoffで使えない場合は別の手段が必要になります。
それがgethostbyaddrです。
$_SERVER['REMOTE_ADDR']でIPを取得してgethostbyaddrでホスト名を取得することができます。
<?php
$ip = $_SERVER["REMOTE_ADDR"];
$hostname = gethostbyaddr($ip);
echo "ホスト名です:" . $hostname;
?>
ホスト名です:ec2-3-238-49-228.compute-1.amazonaws.com
戻る

全体目次