質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

.htaccess

Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

Q&A

0回答

1372閲覧

WordPressの特定のカスタム投稿タイプにBasic認証を実装したい

3omi0

総合スコア29

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

.htaccess

Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

0グッド

0クリップ

投稿2020/07/15 04:43

実現したいこと

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認証を求められ、設定したアイパスでは通過できなかった。

⇒⇒上記以外の復帰方法が見つからなかったので、フォルダの案も断念。

以上が試した方法になります。

ここまでお読みいただきありがとうございました。
アドバイス等ありましたら、ご教示いただけますと幸いです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問