ベーシック認証の設定で気をつけること

.htaccessでベーシック認証を設定する時に躓いたので、同じ過ちを犯さないようにメモです。

ID・パスワードを求められるも500のエラー

一見うまく行ったのかと思いましたが.htaccessの設定がだめでした。

参考にさせていただきました。そして引用させていただきます。

.htaccessでBasic認証の設定をする方法 | てらこや.work
.htaccess の使い方や書き方・設置方法/ Web Design Leaves

設定内容

ベーシック認証の設定。まずは.htaccessファイルと.htpasswdファイルにブラウザなど外部からアクセスできないようにします。

<Files ~ "^\.(htaccess|htpasswd)$">
Deny from all
</Files>

スマートに書いた形<Files ~ "^\.ht">は、正規表現で「“.ht”で始まるファイル」ということですね。
deny from all。ややこしくてなかなか覚えられない。この記述ですべて拒否です。

そしてディレクティブの設定。
(ディレクティブを調べたら難しかったです。「命令」?「指示文」?)

ディレクティブ 説明
AuthType BASICを指定すると基本認証
AuthUserFile パスワードファイル名
AuthName 認証名(認証ウィンドウの表示)
Require 認証ユーザー(valid-user : ファイルに書かれた全ユーザー)
AuthGroupFile ユーザ認証のためのグループファイルを指定

AuthTypeにはBasicBasic認証)とします。DigestMD5 認証)というのもあるそうです。
AuthNameには"Please enter your ID and password"と書きました。「IDパスワードを入れてください」という表示の指定ですが、Chromeでは普通にURLが出ました。
Requireには valid-user。IDパスワードを正しく入力すれば、パスワードファイル(.htpasswd)に記述されている全てのユーザを許可することを示します。valid-user以外には、アクセスを許可するユーザー名やグループ名をスペースで区切って指定します。
AuthGroupFileには、Requireディレクティブで Require groupを宣言した場合のみ必要です。利用しない場合は/dev/nullを指定します。

AuthUserFileが間違っていました

あるあるです。「ベーシック認証 500エラー」などで調べてもAuthUserFileのパスは正しいか確認しましょう、ということはよく書かれています。
サーバーのコンパネを確認したから大丈夫!と思っていましたが、見ていたところを間違えました。

ドキュメントルート

ドキュメントルートとはサイトを公開する為に決められた場所(ディレクトリ)になります。また公開されるディレクトリの最上部にもなります。

ドキュメントルートとは?初心者でも分かるように解説! | WP FAN

ドキュメントルートを誤って入れていました。 正しくはAuthUserFileにはサーバーのルートディレクトリからの.htpasswdへのパス(サーバーのフルパス)を入れます。

ルートディレクト
一番上のディレクトリ。一番はじめの「/」。

サーバーのルートディレクトリ ≠ ドキュメントルート

です。

サーバーのフルパスを知る方法

今回はサーバー会社のサイトから調べましたが、phpファイルを使って調べる方法があります。

  1. phpファイルを作成(<?php echo __FILE__ ;?>と書く)
  2. 1.で作ったファイルをアップする
  3. 2.をアップしたファイルへアクセスする

するとブラウザに表示されます。

ポイント

サーバーのフルパスが「/public_html」で始まることはまずない

確かにイメージしても一番上な気がしません。/userや/homeなどでは始まったりします。

.htpasswdを置くところ

.htaccessと一緒に作ることになる.htpasswd。.htpasswdを置く場所は.htaccessと同じディレクトリに置くのはセキュリティ上よくないです。ドキュメントルートより上が望ましいです。

***

.htaccessの書き方は覚えられそうにありませんが、AuthUserFileの書き方はこれで間違えないと思います。