特定のファイルだけに Basic 認証をかける方法
Webサイトの一部だけに Basic 認証をかけたいことは多いですが、Xserver や .htaccess の仕様の影響で意外とハマりやすい部分があります。
この記事では、実際に 特定ファイルにだけ Basic 認証を適用しようとしてハマったポイントと、最終的な解決をまとめています。
1. やりたいこと
- サイト全体ではなく 特定のファイルのみ Basic 認証を設定したい
-
.htaccessを使って制御したい - Xserver の環境で運用している
2. htpasswdの設定
Basic 認証を設定する際に必要な .htpasswd ファイルの作成・配置方法について解説します。
.htpasswd ファイルとは
.htpasswd は、Basic 認証で使用するユーザー名とパスワードを保存するファイルです。
パスワードは暗号化された状態で保存されます。
.htpasswd の生成方法
オンラインジェネレーターを使う(最も簡単)
以下のようなオンラインツールで簡単に生成できます:
手順:
- ユーザー名とパスワードを入力
- 暗号化方式を選択(通常は
APR1またはbcrypt) - 生成されたコードをコピー
生成例:
username:$apr1$j0soekld$LF6AEybF.K.sGapsObOxA0
.htpasswd ファイルの作成とアップロード
手順:
1 . ローカルでファイルを作成
- テキストエディタで
.htpasswdという名前のファイルを作成 - ジェネレーターで生成したコードを貼り付け
admin:$apr1$abc12345$XYZ...
user2:$apr1$def67890$ABC...
2 . サーバーにアップロード
- FTP/SFTP クライアント(FileZilla など)を使用
- 配置場所を決める(後述)
.htpasswd の配置場所
推奨:public_html の外に配置
理由:
-
public_htmlの中に置くと、万が一.htaccessの設定ミスでファイルが直接閲覧できてしまうリスクがある - セキュリティ的に、Webからアクセスできない場所に置くのがベストプラクティス
ディレクトリ構造例:
/home/【契約ID】/
├── public_html/ ← Web公開ディレクトリ
│ ├── index.html
│ ├── admin/
│ │ └── .htaccess
│ └── ...
└── htpasswd/ ← ここに配置(public_htmlの外)
└── .htpasswd
3. .htaccessの設定
最初に以下のような .htaccess を設置し、特定ファイル(例:/admin/index.php)にアクセスした場合だけ Basic 認証をかけます。
<Files "index.php">
AuthType Basic
AuthName "Restricted"
AuthUserFile /home/【XserverID】/【ドメイン名】/htpasswd/.htpasswd
Require valid-user
</Files>
401エラー
他の.htaccessなどで、index.htmlやindex.phpを表示しない等の処理を記載していると401エラーが発生する可能性があります
500エラー
.htaccess内のAuthUserFileの絶対パスを間違えていた場合500エラーが発生する可能性があります
AuthUserFileに記載する絶対パス内の【XserverID】はxs123456のような羅列の文字ですので注意してください(@とかはつけません)
4. まとめ(今回の学び)
今回のハマりポイントは以下の3つ:
- Basic 認証より先にリダイレクトが動くと認証が崩れる可能性がある
- AuthUserFile のフルパスは絶対に正確でなければいけない
- Xserver では「/home/契約ID/...」が正しいパス構造。
