フリーランス|WEB 制作経験丸7年、制作会社様からのご依頼に丁寧・高クオリティでお手伝いいたします。 IRODORI DESIGN

B L O G

【Basic認証】特定のディレクトリのみ認証を除外する方法・別の認証を設定する方法

Basic認証
プログラミング

Basic認証を設定するとユーザー名とパスワードを入力しないとアクセスする事が出来ません。
テストサイトだったり何らかの理由で一般ユーザーには見せたくない場合によく使われるものです。

そんなBasic認証ですが、特定のディレクトリのみ除外したいと言われたり、別の認証パスワードを設定したいと言われることもあるかもしれません。
そこでこの記事ではそれらの設定方法をご紹介したいと思います。

はじめに、
このページでご紹介するサーバーのディレクトリ・ファイル構成は以下を想定しています。
自分の環境に合わせて適宜変更してください。

root
├ images/
├ css/
├ .htaccess
└ .htpasswd

Basic認証の基本

まずは簡単にBasic認証の基本的な記述を見てみましょう。

# AuthUserFileは.htpasswdまでのルートパスを指定
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /XXX/XXX/.htpasswd
Require valid-user

.htaccessをアップしたディレクトリと同じディレクトリにユーザー名とパスワードを記述した.htpasswdをアップします。

AuthUserFileで指定する.htpasswdまでのルートパスが分からない場合は、以下のコードを記述したPHPファイルをサーバーにアップして、このファイルにアクセスします。
そうするとこのファイルまでのフルパスを出力してくれます。

<?php
$root_path = __DIR__;
echo $root_path;

ページに出力されるルートパスを以下の部分に記述すれば認証をかける事が出来ます。

AuthUserFile /XXX/XXX/.htpasswd

特定のディレクトリのみBasic認証を除外する方法

さて、ここからはこの記事の本題。
特定のディレクトリのみBasic認証を除外する記述をご紹介します。

その記述方法はこちら。このサンプルコードではimagesディレクトリとCSSディレクトリを除外しています。

# AuthUserFileは.htpasswdまでのルートパスを指定
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /XXX/XXX/.htpasswd
Require valid-user

# imagesとCSSディレクトリは認証を除外する場合
SetEnvIf Request_URI "^/images/" allow
SetEnvIf Request_URI "^/css/" allow
Order allow,deny
Allow from env=allow
Satisfy any

この記述をした.htaccessをサーバーにアップすると指定したディレクトリだけは認証無しでアクセス出来ます。

特定のディレクトリのみ別のBasic認証を設定する方法

続いてご紹介するのが特定のディレクトリのみ別のBasic認証を設定する方法です。
サンプルとしてimagesディレクトリのみ別の認証を設定してみます。
その場合、rootディレクトリとは別にimagesディレクトリにも.htaccessと.htpasswdをアップします。

root
├ images/
│ ├ .htaccess
│ └ .htpasswd
├ css/
├ .htaccess
└ .htpasswd

まずルートディレクトリのBasic認証は以下のように記述します。

# AuthUserFileは.htpasswdまでのルートパスを指定
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /XXX/XXX/.htpasswd
Require valid-user

まずは全体に対してBasic認証を設定します。
続いて、imagesディレクトリの.htaccessに以下のように記述します。

# AuthUserFileは.htpasswdまでのルートパスを指定
AuthType Basic
AuthName "only Restricted Area"
AuthUserFile /XXX/XXX/images/.htpasswd
Require valid-user

imagesディレクトリに個別に指定する事でルートディレクトリで設定したものが上書きされるので別の認証を設定する事が出来ます。

最初にご紹介した特定のディレクトリのみ除外して、その除外したディレクトリに個別に設定しようとしたけど、その場合、ルートディレクトリで除外した設定が影響してしまい、個別に設定した認証も機能しなくなってしました。
なので、全体に設定し、個別に指定して上書きする方法をとるようにしましょう。

まとめ

いかがでしたか?
Basic認証を設定する機会は多いと思います。
その時、このディレクトリだけは除外したいや別の認証を設定したいという事はよくあると思います。
ぜひ、今回ご紹介した方法を使ってみてください。