実現したいこと
WordPressの特定のカスタム投稿タイプのアーカイブページ、シングルページにBasic認証を実装したいと考えております。
検索して見つけた下記の方法では実現できませんでした。
ご教示いただけると幸いです。
前提
・カスタム投稿タイプ:works
・シングルページパーマリンク:sample.com/worsk/{{数字}}
・WordPressはsample.com/wpにインストールして、サイトアドレスをsample.comに変更しています。
試したこと
#####①function.phpでBasic認証のための関数を定義
######①-1 関数を定義
//function.phpに記述 function basic_auth($auth_list,$realm="Restricted Area",$failed_text="認証に失敗しました"){ if (isset($_SERVER['PHP_AUTH_USER']) and isset($auth_list[$_SERVER['PHP_AUTH_USER']])){ if ($auth_list[$_SERVER['PHP_AUTH_USER']] == $_SERVER['PHP_AUTH_PW']){ return $_SERVER['PHP_AUTH_USER']; } } header('WWW-Authenticate: Basic realm="'.$realm.'"'); header('HTTP/1.0 401 Unauthorized'); header('Content-type: text/html; charset='.mb_internal_encoding()); die($failed_text); }
//header.phpの一番上に記述 <?php if(is_post_type_archive("works") || is_singular("works")): $userArray = array( "user" => "pass" ); basic_auth($userArray); endif; ?>
⇒結果:ローカル環境では成功したが、本番環境ではBasic認証が通らなかった。
参考サイト様
プラグインなしで特定カテゴリーにベーシック認証を【WordPress】
######①-2 .htaccessに記述
確認したところサーバーのPHPバージョンが標準でfastCGIが設定されているため、正常に動作しなかったためと推測。
sample.com/.htaccessに下記を追加。
#sample.com/.htaccessに2行追加 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP:Authorization} ^(.*) #追加 RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1] #追加 RewriteBase /wp/ …
⇒結果:変わらず、Basic認証通らない。
参考サイト様
プラグインなしで特定カテゴリーにベーシック認証を【WordPress】
######①-3 PHP_AUTH_USERとPHP_AUTH_PWを変更
fastCGIでは$_SERVER['PHP_AUTH_USER']と$_SERVER['PHP_AUTH_PW']が使えないそうなので、下記のように変更。
#sample.com/.htaccessに追加した2行を変更 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP:Authorization} ^(.*) #変更 RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] #変更
//phpに追加 list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':' , base64_decode(substr($_SERVER['REDIRECT_HTTP_AUTHORIZATION'], 6)));
phpに追加した1行は、参考サイト様には追加位置が記載されていなかったので、下記の3通りを試行。
・header.phpの最上部
・function.phpの最上部
・function.phpで作成した関数basic_auth内の一番上
⇒結果:変わらず、Basic認証通らない。
参考サイト様
PHP as cgi/fastCGI でPHP_AUTH_USER が使えないので対処方法
⇒⇒上記以外の復帰方法が見つからなかったので、PHP関数の案は断念。
#####②ルート直下にフォルダを作成し、.htaccessでBasic認証をかける
######②-1 「works」のフォルダを作成
sample.com/worksのフォルダを作成し、index.php、.htaccess、.htpasswdを設置。
//sample.com/works/index.phpに記述 define( 'WP_USE_THEMES', true ); require( '/{{絶対パス}}/wp/wp-blog-header.php' );
//sample.com/works/.htaccessに記述 define( 'WP_USE_THEMES', true ); AuthType Basic AuthName "Input your ID and Password." AuthUserFile /{{絶対パス}}/works/.htpasswd require valid-user
//sample.com/works/.htpasswdに記述 user:(暗号化したpassword)
参考サイト様
プラグインなしで特定カテゴリーにベーシック認証を【WordPress】
⇒結果:sample.com/worksでリダイレクトループが発生。
######②-2 リダイレクトループ回避の記述
function.phpの最下部に下記を記述
//function.phpに記述 remove_filter('template_redirect', 'redirect_canonical');
参考サイト様
WordPressのカテゴリ単位・フォルダ単位でBasic認証を設定する方法
⇒sample.com/worksを叩くと、狙った通りBasic認証を求められ、設定したアイパスで無事通過。
しかし、シングルページ(sample.com/works/000)に入ろうとすると、再びBasic認証を求められ、設定したアイパスでは通過できなかった。
⇒⇒上記以外の復帰方法が見つからなかったので、フォルダの案も断念。
以上が試した方法になります。
ここまでお読みいただきありがとうございました。
アドバイス等ありましたら、ご教示いただけますと幸いです。
よろしくお願いいたします。
あなたの回答
tips
プレビュー