最近、.htaccessを使ったBasic認証を導入した際に
Internal Server Error (ステータスコード500)が発生したので、
対処法を今後の為に残しておきたいとおもいます。
.htaccessによるBasic認証でInternal Server Error(500)
.htaccessはこんな感じでした↓
AuthType Basic
AuthName "Input your ID and Password."
AuthUserFile '.htpasswdのパス'
require valid-user
.htpasswdは自分で作ったBasic認証用のパスワード暗号化ツールで作成したもの↓
.htaccessと.htpasswdはBasic認証を行うファイル(test.php)と同じ階層に配置してます。
Basic認証でInternal Server Error(500)が発生した場合に確認すべきところ
Internal Server Errorなので、何かしら設定がおかしいっぽいのですが、具体的な内容が把握できなので、とりあえずネットで調べてみることに。
ネットで調べた感じだと、.htaccessを使ったBasic認証でInternal Server Errorが発生した場合に確認すべき箇所は以下あたり。
- .htaccessのフルパスの記述(正しいパスか?)
- .htaccessと.htpasswdの中身の最後が改行で終わっているか?
- 設置しているサーバーは.htaccessが利用できるサーバーか?
- パーミッションが604になっているか?
- .htpasswdはちゃんと暗号化されているか?
.htaccessの.htpasswdのパスが間違っていた
一個ずつ確認して行った結果、最終的には.htaccessに記述している.htpasswdのパスが間違っていたようです。
サーバーの管理ツールで表示されたパスを記述したのですが、それだとフルパスじゃないからインターナルサーバーエラーが出ていた模様。
.htpasswdのフルパスを確認する方法
<?php
//フルパス
echo __FILE__ . '<br />';
?>
.htpasswdの正しいパスを確認する方法を調べた結果、htpasswdと同じ階層に上記のようなPHPファイルを設置してアクセスすれば.htpasswdファイルまでのフルパスを出力してくれそうです。
なので今後.htaccessでBasic認証を導入する際、ディレクトリまでのフルパスがわからない場合は、まず同じ階層にPHPファイルを設置してパスを出力し、そのパスを.htaccessに記述するようにするようにしたいとおもいます。