今回やりたいこと
下記の環境を用意しており
- 本番環境
- staging環境
- local開発環境
staging環境にのみIP制限をかけたい
htaccessでやりたいこと
- 特定のip、本番、localだと認証無しでアクセスできる
- 上記じゃない場合、basic認証をとおす
htaccess記述内容
Order Deny,Allow
# Denyを評価したあとにAllow評価。今回は下記のDeny from allで一度全部拒否にしてその後でAllowを設定している。Satisfy Anyを最後につけることで一度DenyされていてもAllowに入っていれば通るようになっている
Deny from all
# 接続先ホスト名が www.example.com または localhost の場合の環境変数 NO_AUTH を定義
SetEnvIf HOST "^(www\.example\.com|localhost)$" NO_AUTH
# 環境変数(接続先ホスト名)による許可
Allow from env=NO_AUTH
# Basic認証
AuthType Basic
AuthUserFile /home/xxxx/.htpasswds/passwd
AuthName "Login Password Required"
Require valid-user
# IP アドレスがマッチする場合も許可する場合
# Allow from xxx.xxx.xxx.xxx
# Allow か Require いずれかの条件にマッチすれば許可
Satisfy Any
参考にした記事
https://www.tam-tam.co.jp/tipsnote/program/post7085.html
- 本来deny from allはあってもなくてもこの場合処理変わらないがわかりやすくするために記述されている
- http://koseki.hatenablog.com/entry/20100913/ApacheAccessControl
-
Satisfy Any
はどれかの条件にあっていればいい、Satisfy All
はすべての条件をクリアしないとアクセスできない。 -
Satisfy Any
はどこにかいてもいい - www.example.comの\は直後の正規表現をエスケープしている( https://murashun.jp/article/programming/regular-expression.html )