phpでheaderを利用してbasic認証を呼び出す方法はいかがでしょう?試していないのでなんともいえませんが。
少なくともカテゴリページを構成しているURIは仮想ディレクトリですので、仮想ディレクトリをbasic認証することはできないと思います。
<?php
my_login_chk();
function my_login_chk(){
$flg = FALSE;
if( !isset($_SERVER['PHP_AUTH_USER']) ) {
header("WWW-Authenticate: Basic realm=\"認証名\"");
header("HTTP/1.0 401 Unauthorized");
unset($_SERVER['PHP_AUTH_USER']);
echo "<script=javascript>location.reload();</script>";
echo "ログインできませんでした";
exit;
} else {
$fname = "loginid.txt";
$result = @file($fname);
foreach($result as $val){
$id = strtok($val,"\t");
$pass = strtok("\t");
if( trim($id) == $_SERVER['PHP_AUTH_USER'] && trim($pass) == $_SERVER['PHP_AUTH_PW']) {
$flg = TRUE;
}
}
}
if( !$flg ) {
unset($_SERVER['PHP_AUTH_USER']);
header("Location:http://" . $_SERVER['HTTP_HOST'] . "/error.php");
exit;
}
}
?>
こんな感じのファイルを用意してincludeで呼び出して使うとか。アドレスとかは適当、検証もしてないのでその辺はよろしく。参考書の受け売りなのでもっといい方法があるかも。てことで参考までに;)
shokun0803さん
回答ありがとうございます。
さきほど試してみたのですが、サイト全体に認証がかかってしまいました。
認証をかけたいのはmembarというスラッグのカテゴリなのですが、Locationをhttp://www.hoge.com/memberと記入したのが間違いなのでしょうか。
あと、回答いただいた記述はheader.phpの1行目に書いてみたのですが合ってるのか不安です。
そもそも
>少なくともカテゴリページを構成しているURIは仮想ディレクトリですので、仮想ディレクトリをbasic認証することはできないと思います。
という回答はPHPを使っても、仮想ディレクトリにはBasic認証できないという意味だったんでしょうか(^^;)
すみません、なにぶん修行中の身なのでわからないことのほうが多いです。
よろしくお願いします。
回答いただいた記述はheader.phpの1行目に書いてみたのですが合ってるのか不安です。
いや、別ファイルで作成して、制限をかけたいファイルでインクルードして使用します。今回の場合はテーマの中に作ったカテゴリー用のphpファイルになるでしょうか。
という回答はPHPを使っても、仮想ディレクトリにはBasic認証できないという意味だったんでしょうか
WrodPressの場合、 http://exeample.com/category/ というフォルダがあったとしても実際にはcategoryという実フォルダは存在しません。また、実フォルダを存在させると(サーバーの設定にもよりますが)実フォルダにアクセスしに行ってしまい、そのフォルダではWordPressが働きません。
よって、memberという実フォルダを作成してhtaccessなどをそこに作成してしまうとmemberフォルダの中ではWordPressを動かすことができず、実フォルダを作成しないとそもそもアクセス制限を行いたいフォルダにファイルを格納できないというジレンマに襲われます。
したがって、アクセス制限用のファイルはどこか別の場所に作成しておき、phpでそのファイルを呼び出すことで任意のファイルでBasic認証ができないかとのアプローチです。
前回も記述しましたが、テストを行ったわけではないのでまったくの未検証です。もちろん動くかどうかもわかりません。ご了承願います。
やはり、テストしてもうまくいかないのですが、
それは自分の力不足だと思ってます。
shokun0803さんのヒントをいかし
自分なりにテストを繰り返し、
自分でなんとかできるようになるまで勉強していこうと思います。
ありがとうございました。