特定ディレクトリでBasic認証を使う場合
WPは既存のディレクトリがある場合、そちらを優先して参照するため、既存のディレクトリにBasic認証を使用する場合、少し工夫が必要になる。
- /hoge/ ディレクトリを作成
- /hoge/ ディレクトリに wp 直下の index.php をコピーする
- コピーした index.php で読み込んでいる「wp-blog-header.php」のパスを修正する
- /hoge/ に .htaccessを設置しBasic認証をかける
- リダイレクトループが発生した場合は下記で解除する
remove_filter('template_redirect', 'redirect_canonical');
Basic認証がかかったページを wp_remote_get() で取得する場合
/* 参考 https://memo.dogmap.jp/tag/basic-%E8%AA%8D%E8%A8%BC/ */
$user = 'user';
$password = 'password';
$url = 'https://hoge.com';
$args = array(
'headers' => array(
'Authorization' => 'Basic '.base64_encode("$user:$password")
)
);
$result = wp_remote_get($url, $args);
ユーザー認証をBasic認証に利用する
/* 参考 https://memo.dogmap.jp/tag/basic-%E8%AA%8D%E8%A8%BC/ */
<?php
function basic_auth(){
nocache_headers(); // キャッシュを削除
if ( is_user_logged_in() )
return;
// WordPress のユーザー認証で BASIC 認証ユーザー/パスワードをチェック
$user = isset($_SERVER["PHP_AUTH_USER"]) ? $_SERVER["PHP_AUTH_USER"] : '';
$pwd = isset($_SERVER["PHP_AUTH_PW"]) ? $_SERVER["PHP_AUTH_PW"] : '';
if ( !is_wp_error(wp_authenticate($user, $pwd)) ) {
return;
}
// BASIC 認証が必要
header('WWW-Authenticate: Basic realm="Please Enter Your Password"');
header('HTTP/1.0 401 Unauthorized');
echo 'Authorization Required';
die();
}
add_action('template_redirect', 'basic_auth');