さくらサーバーでBasic認証とアクセス制限を設定する.htaccessの書き方

さくらサーバーでBasic認証をしたり、IPアドレスやホストの制限、ファイル単位での制限をする場合の.htaccessの書き方を紹介します。

最終更新日:2023-10-28 16:23

他人に見られたくないディレクトリやプログラムファイル、データファイルにパスワードを設定するには、「Basic認証」という機能を使用します。
今回は「さくらサーバー」で、ファイルやディレクトリ単位でBasic認証をするための「.htaccess」の書き方を紹介します。
ベーシック認証をさらに強力にした、IPアドレスやホストによる制限も加えてみました。

目次

さくらサーバーで.htaccessの書き方がわからない?

先日、管理しているサイトを管理していたら、ベーシック認証が出来なくなっていました。そういえばいつからだっけ?と思いだしてみたのですが、どうもだいぶ前から誰でもアクセスできる状態になっていたっぽい。
設定(.htaccess)を見直してみたのですが、ちゃんとパスワード認証が動作していた時と変わりない記述で、変更した覚えもありません。
さくらサーバーの方針転換でベーシック認証が使えなくなったのかな?

色々調べてみたのですが、私と同じような症状で悩んでいる人はいないっぽい。しかも「.htaccess さくらサーバー Basic認証」的な内容でググっても、さくらサーバーのヘルプページが表示されるだけで、よくわからない。
さくらサーバーのヘルプページは、「.htaccess」による設定ではなく、ファイルマネージャーを使ったディレクトリ単位の制限なので、私が実現したい制限とはちょっと違う。

ファイル単位でベーシック認証をかける

私が実現したいのは、すべてのサブドメインに対して一律に特定の名称のファイルにアクセスするときは、ベーシック認証をかけ、さらにIP/ホストによる制限もかける。

という感じ。
結論から言ってしまうと、さくらサーバーでもファイル単位・ディレクトリ単位・サブドメイン単位のベーシック認証を.htaccessで出来ます。
やり方は以下。

さくらサーバーでベーシック認証

パスワードを作成する

自分でIDとパスワードが記述されたファイルを用意してもいいのですが、今回はパスワードの作成から行う手順を紹介します。
まずはさくらサーバーの管理画面にログインします。

続いて①の「Webサイト/データ」をクリックし、②「ファイルマネージャー」をクリックします。

今回は管理しているサブドメインすべてに適用する設定にします。ということで、トップディレクトリのパスをクリックして反転表示(薄い水色の背景)にします。

特定のサブドメインやディレクトリにだけ適用させたい場合は、適用させたいサブドメインのフォルダ、もしくは適用させたいディレクトリのフォルダを開いて反転表示させます。

「表示アドレスの操作」をクリックし、「フォルダ作成」をクリックします。

IDとパスワードを記述したファイルを保存するフォルダを作成します。
適当な名前でかまいませんが、今回は「Password」という名前にします。「OK」をクリック。

フォルダが作成されました。クリックして反転表示させます。

再び「表示アドレスへの操作」を選択し、②「アクセス設定」を選択します。

「パスワード制限」タブが開いていることを確認し、①「パスワード制限を使用する」にチェックを入れます。

②「両方の許可がないとアクセス不能」にチェックを入れます。
ここにチェックを入れると、指定したIPアドレス/ホストでないと、そもそも指定したファイルにアクセスできなくなります。
もし、パスワードさえ合っていればアクセスさせる場合は、「一方の許可があればアクセス可能」のほうにチェックを入れます。

パスワードを作成する

続いてIDとパスワードを登録します。
「パスワードファイル」の部分の「編集」をクリックします。

登録されているIDとパスワードの一覧が表示される(まだ登録していないので何も表示されていません)ので、「追加」をクリックします。

IDとパスワードを決めます。
①は、ユーザー名。
②と③は、パスワード。同じものを入力します。
④は、パスワード管理画面で参照するコメントなので何でも構いません。(鈴木さんのIDなどわかりやすいもので)

⑤の「OK」をクリックします。

IDとパスワードが登録されました。複数のユーザーに認証させるには、今の動作を繰り返します。
「OK」をクリックします。
これでIDとパスワードが記述された特殊なファイル「.htpasswd」というファイルが、作成したフォルダ内に作成されました。

.htaccessを作成

いよいよ「.htaccess」ファイルを作成します。

再びトップディレクトリをクリックして選択状態にします。

①「表示アドレスへの操作」をクリックし、②「ファイル作成」を選択します。

画像のように記述します。
①の<Files basic.php> は、アクセス制限したいファイルの名称にします。
「basic.php」の部分を適当に変更してください。

②の「AuthUserFile」以降のパスは、ご自身の環境に合わせて先ほど作成した「.htpasswd」ファイルに変更してください。

③は、アクセス可能にするIPアドレスもしくはホスト名のドメインを指定します。
自分はアクセスさせたい場合は、IP/ホスト変換ツールで表示させてみてください。

「Satisfy all」は、パスワード認証とIPアドレス/ホストの制限のどちらもマッチしないとアクセスできない設定です。

「Require valid-user」は、パスワード認証を通過したアクセスは以後、認証なしでアクセスさせます。
内容は以下のようにします。■色の部分は、各自の環境によって変更してください。

① sample.html パスワードを掛けたいページ
② /home/userABCD/www/Password/.htpasswd・・・パスワードが保存されているファイルへのパス
③ .docomo.co.ne・・・アクセスを許可するホスト(例ではドコモ通信からのアクセスは許可)

<Files sample.html>
  AuthUserFile /home/userABCD/www/Password/.htpasswd
  AuthType Basic
  AuthName "Web access"
  Require valid-user
  Satisfy all
  Order deny,allow
  Deny from all
  Allow from .docomo.co.ne
</Files>

右下にある「保存」をクリックします。

ファイル名に「.htaccess」と記述し、「OK」をクリックします。

「.htaccess」が作成されました。

確認とエラー

実際にベーシック認証がどうさせるか確認します。
このように「ユーザー名」と「パスワード」の入力画面が出れば成功です。
登録したIDとパスワードを入力し、きちんとアクセスできるか確認してください。

500番のステータスエラーが出る場合

このような「Internal Server Error」が出る場合は、「.htaccess」の記述が間違っています。
パスワードを記述したファイルへのパスが間違っていないか(大文字小文字の違いなど)確認してください。
またスペルミスが無いか確認してください。

ベーシック認証が出来ない?

.htaccessファイルは、より下位にあるファイルの方が優先されます。
今回はトップディレクトリ上に設置しましたが、サブドメインや下位のディレクトリ内に設置した「.htaccess」の方でアクセスを許可させてしまっていると、ベーシック認証がうまく動作しなかったり、誰でもアクセスができてしまう状態になってしまいます。
うまく動作しない場合は、サブディレクトリに.htaccessファイルが無いか調べてみてください。

また、

Deny from all
Allow from xxxxx

のように「Deny」がないとうまく制限できないので注意。

Sponsored Link

関連ページ