WordPressでマルチサイトを作成したサイトにBasic認証をかけるたい場合があります。
具体的には、マルチサイトのURL「http://exemple.com/」の「http://exemple.com/sample/」にBasic認証をかけたい、という場合です。
私は、WordPressを設置しているルートディレクトリにFTPで「sample」というディレクトリを作成します。
次に、作成したディレクトリ「sample」の中にルートディレクトリの「index.php」をコピーします。
この作業での注意は、「index.php」の中の記載を修正することですが、ついつい忘れてしまいます。
具体的には、
「require( dirname( __FILE__ ) . ‘/wp-blog-header.php’ );」
を
「require( dirname( __FILE__ ) . ‘/../wp-blog-header.php’ );」
このように修正します。
「wp-blog-header.php」のパスは、ルートディレクトリから1階層下の場所にあるので「../ 」が必要なんですね。
なお、Basic認証のためには、「.htaccess」と「.htpasswd」を作成して、FTPでサーバーにアップロードする必要があります。
Basic認証をかけたいサイトが複数ある場合に、それぞれのディレクトリー名のフォルダーを作成して、それぞれに「.htaccess」と「.htpasswd」を置く、というのが基本です。
ところが、この手順を間違えたり、忘れてしまったりすることが多いんですよね。
そこで、ミスを無くして簡単にBasic認証をかけられる方法を考えてみました。
よく考えると、パスワードが記載されている「.htpasswd」は、共通のフォルダーに置いて一つにすることが可能です。
また、「.htaccess」の中身も、「.htpasswd」へのパスを共通にすると、全部が同じで共用することができます。
そして、「index.php」の中身も共通です。
ということは、最初に下記の3つのファイルを用意してしまえばいい、ということに気づきました(下記の/home/exempleというパスは単なる例です)。
1)「.htpasswd」を「/home/exemple」の中に一つ作成する
2)「.htaccess」を下記のような内容で一つ作成する
//////////////////////////////////
AuthUserFile /home/exemple/.htpasswd
AuthGroupFile /dev/null
AuthName “Protected Member’s Area”
AuthType Basic
<Limit GET POST>
require valid-user
</Limit>
//////////////////////////////////
3)「index.php」の中の「wp-blog-header.php」のパスを修正したファイルを一つ作成する
この2)と3)のファイルをパックにして、Basic認証をかけたいサイトができたら、FTPでフォルダーを作成して、アップロードすればOKです。
あるいは、最初から、2)と3)のファイルを入れた任意のフォルダーを作成しておいて、Basic認証をかけたいサイトができたら、フォルダーをリネームすれば、OKです。
なお、「.htpasswd」に複数のユーザーを登録する場合には、URLがわかってしまうと、全員が全部のサイトを閲覧できてしまいますので、一工夫が必要ですね。