Apacheで特定のファイル、特定のディレクトリにだけ基本認証を掛けたい

By | 2013/02/23

まず、ファイルの拡張子でアクセスさせたくない場合はこう。

<Files ~ "\.(db|log|ini)$">
  Deny from all
</Files>

ディレクトリを指定して、そこだけ基本認証をかけたいならこう。 ※.htaccesに書くなら <Directory で囲む必要なし。

<Directory /home/xxx/public_html/private/>
  AuthType Basic
  AuthName "DEMO"
  AuthUserFile /home/xxx/.pwd
  AuthGroupFile /dev/null
  require valid-user
</Directory>

その中でも.phpと.htmlだけ基本認証を掛ける場合。※Auth~記述はDirectoryのほうに書くのがコツ。Files内に書いたらNGでした。

<Directory /home/xxx/public_html/private/>
  AuthType Basic
  AuthName "DEMO"
  AuthUserFile /home/xxx/.pwd
  AuthGroupFile /dev/null
  <Files ~ "\.(php|html)$">
    require valid-user
  </Files>
</Directory>

※ 上記のように .html に制限を掛けたいときは、index.htmlというファイル名を指定しない / でアクセスされた場合も考慮しないといけない。ファイル名部分が無い場合も対象になるように以下へ変更。

  <Files ~ "^(.+\.(php|html))?$">
    require valid-user
  </Files>

特定のディレクトリ以下は、基本認証の対象から外したくなった場合はこう。AnyでIP制限か基本認証のどちらか通過すればOKとする。デフォルトはAll

<Directory /home/xxx/public_html/private/non_protect/>
  Satisfy any
</Directory>

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です