以前、『お名前サーバ(SD-12プラン)でベーシック認証を設定する』という記事で、お名前サーバのコントロールパネルからベーシック認証を実装しましたが、実はWordpressを導入しているとうまく設定できないという事象がありました。その解決方法について書いていきます。
ベーシック認証を設定できない原因は?
お名前.com ヘルプサポートのに下記のような記載がありました。
※先にコントロールパネルからアクセス制限を設定し、その後に該当のディレクトリを
作成すると、正常に動作いたしません。
必ず先に該当ディレクトリを作成し、その後にアクセス制限を設定してください。※.htaccessと.htpasswdによるアクセス制限も可能ですが、その際はコントロールパネルでの
同じディレクトリへのアクセス制限はご利用いただけません。
※2022/02/23時点
原因1:アクセス制限設定後にディレクトリ作成
たとえばこのブログですと、『https://okachanblog.com/』というURLです。
仮に『https://okachanblog.com/test_kankyo/』がなんらかのテストを行う予定で『/test_kankyo/』にアクセス制限をかけ、そのあとに『/test_kankyo/』ディレクトリを作成すると正常に動作しないという原因です。
やりガチな内容なので、設定内容に問題ないと思った場合に手順の見直しを行うと良いでしょう。
原因2:.htaccessと.htpasswdが悪さをしている
.htaccessと.htpasswdがすでに存在している場合は、コントロールパネルでアクセス制限を設定を行っても正常に動作しません。
WordPressが原因に関与
先ほどの原因2の『.htaccessと.htpasswdがすでに存在している場合』という点が、Wordpress使用で該当してしまいます。
WordPressのパーマリンクを設定すると.htaccessFが生成されます。
パーマリンクを設定したタイミングでベーシック認証(コントロールパネルでのアクセス制限設定)が外れてしまうのです。
htaccessとhtpasswdでベーシック認証を設定する
コントロールパネルのアクセス制限をかける方法は簡単ですが、Wordpressを使用している場合はうまく動作しません。そのため、従来どおりhtaccessとhtpasswdでベーシック認証を設定します。
- .htpasswdにアイパスを書く
- .htaccessにBasic認証する旨を書く
- .htaccessに、.htpasswdへのサーバールートからの絶対パスを記載する
【1】.htpasswdにアイパスを書く
(1)まずはメモ帳などのテキストエディタを開きます。
(2).htaccess による認証用 パスワード暗号化ツールにアクセスしてパスワード暗号化した文字列を生成します。
①ベーシック認証で使用するID、Passwordを入植する。
②『生成』ボタンをクリック。
③生成されたコードをコピーします。
(3)メモ帳に(2)③.htpasswdの文字列を貼り付けます。
(4)(3)を保存して、ファイル名を『.htpasswd』に書き換えます。
(5)ベーシック認証を設定したいドメインのルートにアップロードします。
【2】.htaccessにBasic認証する旨を書く
(1)先ほどと同様にメモ帳などのテキストエディタを開きます。
(2)下記のテキストを貼り付ける。
AuthUserFile /export/XXXXXXXXXXXXXXXX/test02.okachanblog.com/.htpasswd
の箇所は個別に異なるため【3】で書き方を解説します。
AuthUserFile /export/XXXXXXXXXXXXXXXX/test02.okachanblog.com/.htpasswd AuthGroupFile /dev/null AuthName "Please Enter your ID & Password" AuthType Basic require valid-user <Files ~ "^.(htpasswd|htaccess)$"> deny from all </Files>
(3)ファイル名を『.htaccess』に書き換えます。
(4)ベーシック認証を設定したいドメインのルートにアップロードします。
【3】.htaccessに、.htpasswdへのサーバールートからの絶対パスを記載する
(1)先ほどと同様にメモ帳などのテキストエディタを開きます。
(2)下記のテキストを貼り付けphpで保存します。例として『test.php』で保存します。
これはサーバールートからの絶対パスを表示させるためのコードです。
<?php echo __FILE__; ?>
(3)(2)で作成した『test.php』をベーシック認証を設定したいドメインのルートにアップロードします。
(4)(3)でアップロードしたファイルにアクセスします。
今回の場合は『http://test02.okachanblog.com/test.php』となります。(2)のコードによってサーバールートからの絶対パスが表示されるのでコピーします。
(5)【2】.htaccessにBasic認証する旨を書くで作成した『.htaccess』のAuthUserFile /export/XXXXXXXXXXXXXXXX/test02.okachanblog.com/.htpasswd
の箇所を(4)に倣って書き換えます。
(6)ベーシック認証を設定したいドメインのルートにアップロードします。
(7)ベーシック認証を設定したURLにアクセスし、認証のダイアログが表示されれば完了です。
おわりに
と、いうことで「お名前サーバでベーシック認証を設定できない!原因はWordpress?」でした。
原因がわからずハマったのですが、先人の知恵が書かれている記事を発見して大変助かりました。
頻繁には設定しないhtaccessとhtpasswdの書き方も備忘録として書きました。
誰かの助けになれば嬉しいです!
コメント