matsuo

テスト環境ではBasic認証をかけ、本番環境では外したい (ただし同じ .htaccess ファイルで)

Basic認証の話なんですが

  • テスト環境にはBasic認証をかけたい。
  • 本番環境ではBasic認証は外したい。
  • ローカル環境もBasic認証かけたくない。
  • ただし、なんらかの事情により .htaccess ファイルは共通の内容にしたい。

という場合の、対処方法です。
(納品やコード管理上の都合で、.htaccess ファイルを環境ごとに変えられない場合もありますので……)

記述例

以下のような .htaccess ファイルを書くと、接続先のホスト名によってBasic認証の有無が変わります。
この例では、接続先が www.example.com または localhost の場合は認証なし、その他のホスト名の場合は認証ありとなります。

説明

8行目: SetEnvIf Host 〜 の部分で接続先ホスト名を判断し、マッチした場合は noAuth という環境変数を設定しています。
9行目: Allow from env=noAuth は、その環境変数が設定されていれば接続を許可する、という記述です。
この2行のセットにより、特定のホスト名の場合はBasic認証なしで接続できるようにしました。

もう1つポイントは 5行目の Satisfy Any で、これは「ホスト名かBasic認証のどちらかでアクセスできる」という設定をしています。この行がないと意図したとおりに動きません。(デフォルトは Satisfy All で、その場合「ホスト名とBasic認証の両方をクリアしないとアクセスできない」となります)

12行目以降は、いつもどおりの Basic認証の記述です。


余談ですが、Apache の SetEnvIf は User-Agent やリファラでの判定も可能なので、特定ブラウザからのアクセスに対して〜とか特定URLからのアクセスに対して〜、とかで処理を分けることもできるようですね。

参考

Apache ドキュメンテーションの以下の項目

お問い合わせはこちら