BASIC認証設定がうまくいかない時のチェックリスト

たま~にハマるよね!

レンタルサーバのアクセス制限機能を使ったり、自分で .htaccess.htpasswd を作ったり、何度もBASIC認証の設置を経験していると案外サクっとできてくるようになりますが、たまにどうやっても認証ウィンドウが出てこない!なんて場合があり、余計なところですごい時間を食っている感じがして気ばかり焦ってくる、なんてことがありますよね!

ということで、ここでまとめておきます。
願わくば皆様の貴重なお時間を制作の方に充てられますように。

.htpasswd へのパスは合っているか

基本はこれです。 .htaccess に記述する .htpasswd までのフルパスを、例えば以下のように AuthUserFile に記述しますが、これはサーバ上のフルパスを記述する必要があります。FTPソフトで表示されているフルパスではありません。

AuthUserFile "/home/hogehoge.com/public_html/.htpasswd"
AuthName "Basic authentication."
AuthType BASIC
require valid-user

サーバ上でのフルパスを知る方法は、サーバ屋さんのコントロールパネルにログインして情報がないか確認するか、以下のような簡単なPHPスクリプトをサーバにアップロードして実行すると良いでしょう。(実行・確認後は、すぐに削除しましょう)

<?php echo __FILE__;

絶対にフルパス間違ってないはず!と思う方は、以下のPHPのスクリプトで実際にそのフルパスにファイルが存在しているかチェックしてみてください。

<?php echo file_exists('/(ここにフルパス)/.htpasswd') ? 'OK' : 'NG';

サーバが対応する暗号方式になっているか

サーバによっては利用可能な暗号化方式が決まっている場合があります。サーバ側で用意しているBASIC認証の設定方法を確認しましょう。例えば以下のように、いろんな暗号化方式があります。


# 暗号化なし
user1:123456789

# 通常の暗号化
user1:CWlf.Gqn5fX4U

# よりセキュアな暗号化
user1:$apr1$3sarV8zb$2QHqZnNFq4TuGrsuhef7N.

.htpasswd を生成してくれるウェブサービスもありますが、そういうものは暗号方式が選べるものは少ないようです。

改行/パーミッションは正しいか

今やあまり気にしなくてもいいようになったかと思いますが、古いサーバや特殊な環境だと原因となる可能性もあるので一応確認しておきましょう。

  • .htaccess.htpasswd の最後の行末には改行を入れます。
  • .htaccess.htpasswd のパーミッション(属性)は、サーバが読み込めるものにします。基本的には index.html などの他のファイルと同じでOKです。(例: 0644, 0604 等)
  • .htaccess.htpasswd を格納しているディレクトリのパーミッション(属性)も、サーバが読み込めるものにします。(例: 0755, 0705 等)

UTF-8 with BOM になっていないか

さて、ここまでやってもまだうまくいかないとお嘆きのあなた!
Windows標準のメモ帳とかでUTF-8保存してませんか?

実は文字コードUTF-8には、 BOM無しBOM有り の2種類があり、ファイルを編集するエディタによっては、文字コード UTF-8 で保存する際に BOM有り というモードで保存され、これが影響してBASIC認証が機能しないということがあります。
まさにBOM=爆弾ですね!(BOM=Byte Order Markの略です)

.htaccess.htpasswd は基本的にASCIIコードで保存すべきですが、やむなく日本語を使用する場合は、BOM無しUTF-8で保存する必要があるようです。 Windowsメモ帳でUTF-8保存すると必ずBOM有りで保存されてしまうようですので、別のエディタを使用しましょう。

オススメのエディタは、Visual Studio Code です。
マイクロソフト謹製の無料エディタで、日本語文字コードも自在に扱え、BOMの有り無しも一目瞭然です!

vscodeでUTF-8BOM確認

まとめ

以上になります。
ここまでやってもまだうまくいかない場合は、ファイル名が間違っているとか、書き方がおかしいとか、誤字があるとか、全角空白が混じっているとか、そのあたりの単純な問題かもしれません。
最初からやり直してみたり、実際に動いている .htaccess.htpasswd を持ってきて動かしてみるなど、ひとつずつ紐解いていくといいでしょう。急がば廻れです。

BASIC認証設定がうまくいかない問題は、状況や環境に依存しやすく、なかなか質問系のウェブサービスにも投稿しにくいトラブルなので、急ぎの場合は身近な詳しい人に聞くのも手っ取り早いかもしれませんね。