記事本文
30 分ほどハマったのでメモ
公開対象が限定的なとあるファイル群をアップロードする必要が出たため、そのためのディレクトリを作成し、 .htpasswd ファイルと .htaccess ファイルを置いて BASIC 認証をしようとしたら......何故かうまくいきません。 500 Internal Server Error とのエラーが出ます。
今回のディレクトリ以外にも BASIC 認証をかけているディレクトリはいくつかあったので、そこから .htpasswd ファイルと .htaccess ファイルをコピーしてきたからファイルの記述に間違いは無いはず......ということでいったん BASIC 認証を解除して、 Options +Indexes とだけ書いた .htaccess ファイルを置いてアクセスしてみたらちゃんとファイル一覧が表示されるのです。
認証したディレクトリの下のディレクトリ名にマルチバイト文字列を使っているから 500 Internal Server Error になるなのかな ? と思ってディレクトリ名を英数字のみにしてみましたが、 BASIC 認証を有効にすると再度エラーになります。 これはやはり .htaccess ファイルの記述に何かおかしなところがあるんだろうと思い、正常に BASIC 認証ができているディレクトリの .htaccess ファイルと目視 diff をしてみると、 AuthName ディレクティブの引数くらいしか違いがありません。 ということはそこが原因か ! そういえば今回の AuthName ディレクティブの引数にはハイフンを交えているのが怪しいぞ !
......なんて適当な推理をしてみたものの、そもそも Apache 2.0 のドキュメントを最初に読んでおけ、という突っ込みが来そうです。
AuthName は一つの引数をとり、 スペースが含まれる場合には、 引用符で括らなければなりません。
と書いてあり、ハイフンの有無には触れられていません。
あれー ?
......と思ったら、今回の引数にはハイフンもですがスペースも含めてしまっていました。
ということで引用符で括ってみたらうまくいったのでこうしてメモした次第です。 よって、 Apache 2.0(1.3 もですが ) において AuthName ディレクティブを用いる場合は、ハイフンは用いても OK だが、スペースを用いる場合は引用符で括らなければならないということです。
次に新たな BASIC 認証のディレクトリを作る際のためのメモ
.htaccess ファイルの作成は.htaccessでBasic認証にチャレンジを参考にしたり、これまで作成したものをコピーしたりして作成し、 .htaccess用暗号化パスワード生成機で .htpasswd 用のパスワードを作成していました。
しかし、今回のメモを書いた後に「そういえば.htaccess Editor というものがあったなあ」と思って今試してみたら、このサービスひとつで作成が完了しますね。 今度からこちらを使うようにしよう......

