WordPressサイトで特定のページにBASIC認証を設定する方法

目次
検索しても記事があまり出てこない。
自分もびっくりしたのですが、「WordPressサイト」で「特定のページ」に「BASIC認証」を設定したいだけなのに、あまりマッチした記事がGoogle先生でも引っかかって来ないよ!!
「サイト全体」に「BASIC認証」を掛けたり、「特定のページ」に「パスワード保護」を設定する記事はよく見かけますが、「WordPressサイト」で「特定のページ」に「BASIC認証」を設定する方法はあまりなかったので自分の忘備録として記事にしてみました。
まぁ、あまり事例がないんでしょうね。テスト運用中のサイト全体にBASIC認証を設定する事はよくあるにしても。
BASIC認証を設定する方法。
通常のBASIC認証
そもそも通常BASIC認証を設定する時は下記の方法があると思います。
1. サイトのルートディレクトリトップのhtaccessにBASIC認証の記述をする。
2. レンタルサーバーのコントロールパネルからアクセス制限の設定をする。
今回は「WordPressサイト」で「特定のページ」に「BASIC認証」を設定する。のが条件ですので、まず1の方法だとサイト全体にBASIC認証が設定されてしまいます。次に2の方法だとコントロールパネルからディレクトリを指定してBASIC認証を設定するのですが、WordPressの特性上ディレクトリフォルダが存在していないためコントロールパネルから設定出来ません。
ではどうするか!?
ディレクトリが無いなら作れ
「WordPressサイト」で「特定のページ」に「BASIC認証」を設定する方法
WordPressサイトの構造は下記のような感じ、もしくはwpフォルダなどを作成してインストールするのが一般的だと思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
/ (ルート) └ sample (サイトのディレクトリ) ├ wp-admin ├ wp-content ├ wp-includes ├ .htaccess ├ index.php ├ wp-activate.php ├ wp-blog-header.php ├ wp-comments-post.php ├ wp-config.php ├ wp-cron.php ├ wp-links-opml.php ├ wp-load.php ├ wp-login.php ├ wp-mail.php ├ wp-settings.php ├ wp-signup.php ├ wp-trackback.php └ xmlrpc.php |
では今回は例として、
https://sample.com/about/himitsuにBASIC認証を設定してみたいと思います。
見出しにあるように「ディレクトリが無いなら作れ」ということでディレクトリを作っちゃいます。
sampleの下層に「about」ディレクトリ、さらにその下層に「himitsu」ディレクトリを設置しました。
こうすることで擬似的にWordPressのページのURLを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 |
/ (ルート) └ sample (サイトのディレクトリ) ├ about │ └ himitsu ├ wp-admin ├ wp-content ├ wp-includes ├ .htaccess (←コピーする) ├ index.php (←コピーする) ├ wp-activate.php ├ wp-blog-header.php (〜省略〜) |
単純にディレクトリを増やすだけだと、WorsPressサイトとして動作しなくなるため下記の施策をします。
1. ルートディレクトリトップにある、「index.php」をコピーして「about」と「himitsu」の中へそれぞれ格納します。
2. ルートディレクトリトップにある、「.htaccess」をコピーして「himitsu」の中へ格納します。
3. あらかじめ作成した「.htpasswd」を「himitsu」の中へ格納します。
3. コピーした「index.php」と「.htaccess」の記述を書き換えていきます。
※htpasswdは下記サイトなどで作って下さい。
ルフトツールズ(LUFTTOOLS) web・ウェブ制作に役立つ便利ツール集
ここまでを一度整理すると下記のようになっていると思います。
index.php
17行目の「require( dirname( __FILE__ ) . ‘/wp-blog-header.php’ );」をパスを下の階層に移したので「/..」を書き加えます。
1つ下の階層の「about」のindex.phpは「require( dirname( __FILE__ ) . ‘/../wp-blog-header.php’ );」となり、
2つ下の階層の「himitsu」のindex.phpは「require( dirname( __FILE__ ) . ‘/../../wp-blog-header.php’ );」となります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php /** * Front to the WordPress application. This file doesn't do anything, but loads * wp-blog-header.php which does and tells WordPress to load the theme. * * @package WordPress */ /** * Tells WordPress to load the WordPress theme and output it. * * @var bool */ define('WP_USE_THEMES', true); /** Loads the WordPress Environment and Template */ require( dirname( __FILE__ ) . '/wp-blog-header.php' ); |
↓
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php /** * Front to the WordPress application. This file doesn't do anything, but loads * wp-blog-header.php which does and tells WordPress to load the theme. * * @package WordPress */ /** * Tells WordPress to load the WordPress theme and output it. * * @var bool */ define('WP_USE_THEMES', true); /** Loads the WordPress Environment and Template */ require( dirname( __FILE__ ) . '/../wp-blog-header.php' ); |
.htaccess
「himitsu」フォルダの「.htaccess」へBASIC認証の設定を書き加えます。
AuthUserFileが
AuthUserFileのフルパスは環境に合わせて書き換えて下さい。
1 2 3 4 5 6 7 8 9 10 11 |
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress |
↓
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress AuthType Basic AuthName "Input your ID and Password." AuthUserFile /home/◯◯◯◯◯/about/himitsu/.htpasswd require valid-user |
ちなみにAuthUserFileのフルパスがわからない人は下記のphpをFTPなどで任意の場所にアップロードしてブラウザで表示するとフルパスがわかりますので試して確認して下さい。
1 2 3 |
<?php echo __FILE__; ?> |
該当のURLへアクセスしてみるとBASIC認証がちゃんと機能している事と思います。
うまくいかない方は、各ファイルの階層が正しいか、各ファイルの記述(特にパス)が正しいかもう一度チェックしてみて下さい。