ビジネスパートナーとして利用しているレンタルサーバで、「.htaccess」を利用したBASIC認証の設定がうまくいかなかった・・・
なんか納得できない・・・
サーバ会社のHPによると
とのこと。
しかし、コンパネにログインして確認しても認証をかけたいディレクトリ(cgi-bin)が選択肢にない。
しょーがないから.htaccessと.htpasswdを作成してアップしても認証が正常に動作しない(認証はかかるがIDとPWを入れてもログインできない)。
最初はパスが違うのかと思い、phpinfoを使ったり、パスを調べてくれるCGIを使ったりしたが意外とあってる。それぞれのファイルも他サーバでは正常に動作する記述内容。原因不明・・・
そもそもBASIC認証を利用すること自体あまりよくないが、時間がなかったのでPHPからBASIC認証を利用する方法を探したところ素敵なサンプルを見つけたので利用した。
<?php
$username = null;
$password = null;
// mod_php
if (isset($_SERVER['PHP_AUTH_USER'])) {
$username = $_SERVER['PHP_AUTH_USER'];
$password = $_SERVER['PHP_AUTH_PW'];
// most other servers
} elseif (isset($_SERVER['HTTP_AUTHENTICATION'])) {
if (strpos(strtolower($_SERVER['HTTP_AUTHENTICATION']),'basic')===0)
list($username,$password) = explode(':',base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
}
if (is_null($username)) {
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'Text to send if user hits Cancel button';
die();
} else {
echo "<p>Hello {$username}.</p>";
echo "<p>You entered {$password} as your password.</p>";
}
?>
これで該当ファイルにBASIC認証をかけることができる。今回はさらにPHPのsetcookie() 関数を利用して、「認証を通ったらcookieに所定のデータを埋め込み、リクエストに応える」、「認証を通らずにアクセスした時は、上記のスクリプトファイルにPHPのheader()関数を利用して強制的にリダイレクトする」という形で対応した。ほんとはもっと良いやり方があると思いますが、今回はこれでリリース。
便利なサンプルのおかげで事なきを得ましたが、なんだか納得できない・・・