wordpressでbasic認証をファイルとディレクトリに設定
wordpressでbasic認証をファイルとフォルダにかける方法としては、「.htaccess」を直接弄るか、ファイル単位でも指定できるwordpressプラグインを作成するといったことがあげられます。レンタルサーバでも管理パネルから設定できますが、大抵ディレクトリ単位となっていて、ファイル単位では指定できないようです。
wordpressにはプラグインという仕組みが取り入れられています。これは各テーマに入っている「functions.ph...
basic認証の書式
「AuthType BASIC」は、Basic認証をしています。「AuthName "wordpress site"」は、ダイアログボックスに表示される文字列です。日本語だと大抵文字化けします。「AuthUserFile "/full path/.htpasswd"」は、IDとハッシュ化されたパスワードを保存しているファイルの場所で、サーバ内のスラッシュから始まるフルパスで指定します。「require valid-user」は、全てのユーザーに対してBasic認証を実施するという意味です。他に「AuthGroupfile /dev/null」の指定もありますが、無くても動作します。この設定は、グループファイルを使う時に使います。
wordpressでファイルにbasic認証をかけるには?
対象となるページをグループ化して指定できます。
wordpressでディレクトリにbasic認証をかけるには?
ワードプレスはシステムでは、存在しないディレクトリを作成するため、わざと実在させて「.htaccess」を設置するという方法もありますが、無駄な作業が増えるため、この記事では省きます。といってもディレクトリごとに上記の設定で「.htaccess」を設置すれば良いだけの話ですが。
話を戻します。「.htaccess」ではDirectoryディレクティブとLocationディレクティブは利用できないため、ディレクトリにはSetEnvIfを使います。これらのディレクティブはサーバ管理者側のhttpd.confでのみ使えます。
下のコードにあるSatisfy Anyはどこに記述しても構いません。また、どれか一つが通ればアクセスできるという意味あり、これに対してSatisfy Allはすべての条件が通らないとアクセスできないという意味になります。デフォルトでは後者の設定になっています。
Satisfy Anyでは、他にIP制限などを設けていると、そちらのほうで条件が通ってしまうこともあります。ハマると正常動作していないように見えるため、考えすぎてもだえ苦しみます。以下のSetEnvIf Request_URIは三パターンの内、二つをコメントアウトしていますが、いずれも動作します。複数のディレクトリを指定する場合は、「SetEnvIf Request_URI "^(/wp01/|/wp02/)" ワードプレス_directory」の書式にします。
「.htaccess」での拒否と許可
全てを許可
全て拒否
全てを許可
全て拒否
全てを許可して拒否し、x~、y~のIPアドレスを許可。「order deny,allow」は無くても構いませんが、このような書式が慣習的に好まれているようです。
全てを許可し、x~のみ拒否。order allow,denyを入れる人もいます。
「.htpasswd」
htpasswdは、basic認証でログインする際に入力するユーザー名とパスワードを設定するファイルのことです。中身は、以下のような書式でユーザーごとに一行ずつ追加していきます。パスワードはハッシュ化されますが、password_hashやcrypt関数の単方向のアルゴリズムで作られるため、復号する関数はありません。つまり、元のパスワードを復元する関数は存在しません。利用するには、このファイルをサーバ内にアップロードし、「.htaccess」のbasic認証のAuthUserFileにサーバ内のスラッシュから始まるフルパスで指定します。また、ハッシュ化はこのページの上部にあるフォームでIDとパスワードを入力して作成すると簡単に出来上がります。作成するたびに値が変化します。
ちなみにhtpasswdはたまたまこの名称を使っているだけで、本来は他の名称でも使えます。しかし、httpd.confで初めから設定されている場合は、その設定が無効になるため、慣習的に使われているhtpasswdの名称をそのままにしておいたほうが無難です。
以下のようにすると「.ht」のつくファイルに対してアクセスを拒否できますが、大抵のレンタルサーバではhttpd.confなどで初めから設定されています。また、他にアクセスさせたくないファイルがあれば、この方法を応用してアクセスを拒否できます。
まとめ
basic認証は何もワードプレスに限ったことではありませんが、ワープレのカテゴリーなどではディレクトリを実在させない形でURLを生成します。そのため、簡単にbasic認証をさせようと思ったら、わざわざディレクトリを作成しなければならないなんていう二度手間が発生してしまうんですよ。筆者の場合は、ルートディレクトリの「.htaccess」一つで全てのフォルダを操作したい派です。「.htaccess」は作りすぎるとややこしくなりますし、ましてワープレはURLの構築時にフォルダを実在させないのですから、ただでも「.htaccess」ファイルが増えすぎて混乱する増えに、フォルダまでその混乱に参加してくるとなると、もうどこに何を置いているのか分からなくなります。記事としてまとめて、とりあえずスッキリさせて頂きました。ディレクトリに関しては、SetEnvIfを使えば解決します。ファイルに関してはFilesディレクティブで解決します。