.htaccessの作成方法と記述方法【Basic認証】

Basic認証を目的とした.htaccessファイルの作成方法と、記述方法を整理する。ドット.から始まる特殊なファイルなので、作成時の注意点をまとめる。

.htaccessファイルの作成方法

任意の場所で新規ファイルを作成し、ファイル名を.htaccessに変更する。

あるいは、メモ帳を開き、編集後に.htaccessという名前をつけて保存する。このとき、拡張子が追加されないように注意する。ファイルの種類すべてのファイルにして保存すると良い。

また、エラーを回避するため、最終行のあとに改行を入れる。VS Codeでは、保存時に自動整形が働き、改行が入るようだ。

Basic認証

# Basic認証
AuthType Basic
AuthName "[認証名]"
AuthUserFile ".htpasswdファイルの場所"
AuthGroupFile /dev/null
require valid-user
<Files ~ "^\.(htaccess|htpasswd)$">
deny from all
</Files>
  • AuthType Basic
    • 認証方式の設定
    • 認証方式はBasicDigestがあり、ベーシック認証ではBasicと記述する
  • AuthName ” [認証名] ”
    • ダイアログに表示される文字列。Firefox、Chrome、Edgeで表示されなかった
    • この認証の名前を任意で設定するできるが、半角英数字が良い。
    • 必ずダブルクォーテーション""で囲むこと
  • AuthUserFile ”[.htpasswdファイルの場所]”
    • .htpasswdの設置場所
    • サーバー内のフルパスをスラッシュ/始まりで記述
    • 必ずダブルクォーテーション""で囲むこと
  • AuthGroupFile
    • グループ毎に認証する際に使用
    • ログインするグループのIDとパスワードを書いたファイルの場所を記載する
    • ユーザー毎の認証の場合は/dev/nullと記述するか、1行まるまる記述しない
    • 必ずダブルクォーテーション""で囲むこと
  • require valid-user
    • 全ユーザーに認証を求めるようにするという意味
    • AuthGroupFileを記述しているなら、Require group Adminなどもある
  • <Files ~ “^\.(htaccess|htpasswd)$”> deny from all </Files>
    • ブラウザから.htaccess.htpasswdにアクセスできないようにする記述

特定のファイルにBasic認証を設定

アクセス制限したいファイルのあるディレクトリに、以下を記述した.htaccess設置する。WordPressのlogin.phpにアクセス制限をかけ、ログイン画面に認証を表示させている。

<Files wp-login.php>
AuthUserFile /home/xxx/private_html/.htpasswd
AuthGroupFile /dev/null
AuthName "* MembersOnly *"
AuthType Basic
require valid-user
</Files>

Basic認証の部分的な解除

/child2/test2.htmlを除外したいとする。

  • parent
    • child1
      • test1.html //アクセス不可
    • child2
      • test2.html //アクセス可能
      • .htaccess //ここにアップロード。このディレクトリはアクセス許可
    • .htaccess //このディレクトリはアクセス禁止

除外したいディレクトリに、下記を記述した.htaccessをアップロードする。

Satisfy Any
Order allow,deny
Allow from all
Deny from none

上記について解説すると、Apacheのアクセス制御には2通りある。

  • ホストによる制御 (Order、Allow、Deny)
  • ユーザ認証による制御 (Auth*、Require)

Satisfyは、2通りあるアクセス制御の両方を満たす必要があるかどうかを決定する。

Satisfy All全ての条件をクリアしないとアクセスできない。デフォルト
Satisfy Anyいずれかの条件が通れば良い
Order deny,allow全てのホストからのアクセスを許可する
Order allow,deny全てのホストからのアクセスを拒否する
Deny from none拒否がなし

.htaccessにスクリプトを記述して無効化する

アップロード済みの.htaccessを以下に書き換えるか、新規の.htaccessを作成してアップロードして上書きしても良い。

Satisfy any
order allow,deny
allow from all

.htaccessと.htpasswdは拒否設定不要

Apacheの設定ファイルには、.htaccess.htpasswdなど、.htから始まるファイルはすべてデフォルトでアクセス拒否設定が書かれている。

<FilesMatch "^¥.ht">
    Order allow,deny
    Deny from all
</FilesMatch>