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

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

.htaccessファイルの作成方法

Windowsのメモ帳と、テキストエディタの2パターンで作成する。なお、FTPでサーバーにアクセスしながら作成する方法は、Basic認証の設定方法~.htaccessと.htpasswdを作成する~を参照。

新規ファイルの作成

任意の場所で新規ファイルを作成し、ファイル名を.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
グループ毎に認証する際に使用
ユーザー毎の認証の場合は/dev/nullと記述するか、1行まるまる記述しない
必ずダブルクォーテーション""で囲むこと
require valid-user
全ユーザーに認証を求めるようにするという意味
<Files ~ "^\.(htaccess|htpasswd)$"> deny from all </Files>
ブラウザから.htaccess.htpasswdにアクセスできないようにする記述

補足

AuthGroupFileAuthGroupFile ディレクティブは、ログインするグループのIDとパスワードを書いたファイルの場所を記載する
require valid-userAuthGroupFileを記述しているなら、Require group Adminなどもある

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

アクセス制限したいファイルのあるディレクトリに、以下を記述した.htaccess設置する。


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

WordPressのlogin.phpにアクセス制限をかけ、ログイン画面に認証を表示させている。

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>

Related Tags