htaccessの条件文
-
29-09-2020 - |
質問
ライブサイトで htpasswd 認証をセットアップしており、うまく機能していますが、開発環境で作業しているときにパスワードを求められたくありません。
httpd.conf ファイルには次のようにあります。
SetEnv APP_ENV "development"
私の中で .htaccess
私が持っているファイル:
AuthName "Restricted Area"
AuthType Basic
AuthUserFile /path/to/file/.htpasswd
AuthGroupFile /dev/null
require valid-user
とにかく htppasswd の周りに条件を付けることができるかどうか疑問に思っていました。 APP_ENV
は development
パスワードの入力を求められないこと。
これは可能でしょうか?
解決
可能であれば、へのアップグレードを検討してください。 アパッチ2.4 (または、2.4 がまだ完全にリリースされていないため、最新の 2.3 ベータ ビルドが必要です)。
利用可能な新機能の 1 つは次のとおりです。 認可コンテナ - を使用してアクセス要件を定義するのがはるかに簡単になります。 必要とする 指令。
最終的には次のようになります。
AuthName "Restricted Area"
AuthType Basic
AuthUserFile /path/to/file/.htpasswd
AuthGroupFile /path/to/file/groups
SetEnv APP_ENV "development"
<RequireAll>
<RequireAny>
<RequireAll>
#main requirements
Require group user
#other conditions if needed for non-dev/non-local
</RequireAll>
<RequireAll>
#allow direct if development
Require env APP_ENV development
</RequireAll>
<RequireAll>
<RequireAny>
#allow loopback and local network
Require ip 127.0.0.1
Require ip 10.2
</RequireAny>
</RequireAll>
<RequireAny>
#other conditions if needed for everyone
<RequireNone>
#blacklist
</RequireNone>
</RequireAll>
他のヒント
環境変数を使用して if 条件ブロックを構築する方法の 1 つは、 mod_マクロ モジュール。以前例を作りました ここ.
この特定のケースでは、VirtualHost ファイルの上 (VirtualHost 定義の前) が次のようになります。
<Macro ConditionalBlockMacroSecurity_production>
AuthName "Restricted Area"
AuthType Basic
AuthUserFile /path/to/file/.htpasswd
AuthGroupFile /dev/null
require valid-user
</Macro>
<Macro ConditionalBlockMacroSecurity_development >
<IfModule mod_headers.c>
Header set MyHeader "Hello this is DEVELOPMENT envirronment. It took %D microseconds for Apache to serve this request."
</IfModule>
</Macro>
そして、Virtualhost 内では次のようになります。
Use ConditionalBlockMacroSecurity_${APP_ENV}
ここで、htpassword ファイルへのパスをマクロのパラメータとして設定することもできます。
このソリューションの欠点は、実稼働サーバーに mod_macro をインストールする必要があることです。これは一般的にインストールされるモジュールではないため、そのためには実稼働環境を制御する必要があります。一方、簡単な解決策は、環境に応じて複数のバージョンの仮想ホストを用意し、「認証」セクションにコメントを追加することです。しかし、一般的な解決策を探している場合は、それが再発する問題であり、ファイルの手動編集を避けたいことを意味します。そのような場合、mod_macro は、Apache 設定が単一のマクロになるまで、Apache の経験を活かす非常に専門的な方法になります。パラメータを使用して、他の多くのマクロを呼び出します。
Apache 設定の条件は、設定が [再] ロードされるときに 1 回だけ機能します。
私がやることは、同じルートディレクトリで2番目のVirtualHostを作成し、そこのIPアドレスに基づいて拒否/許可を使用してアクセスを制御することです。
以下を追加します。
Require valid-user
Allow from <dev IP>
Satisfy Any
これには次のことが必要になります Require valid-user
または Allow from <dev IP>
が適用されます。
あなたの中で .htaccess
ファイルを作成すると、次のように IfDefine ディレクティブ内でブロックをネストできます。
<IfDefine PROD>
bla bla bla
</IfDefine>
それなら必ず通過してください -D PROD
Apacheを起動するときの引数として。このセクションは、PROD が定義されている場合にのみ実行されます。Ubuntu では、たとえば次のように編集することでこれを行うことができます。 /etc/apache2/envvars
最後に次の行を追加します。
export APACHE_ARGUMENTS="-D PROD"
おそらく次のようなものを使用して、それを「反転」できます <IfDefine !DEV>
開発環境ではない場合にのみ実行し、その環境で -D DEV を渡し、実稼働サイトを環境変数を編集せずにそのままにしておきます。
ニーズに合わせて適宜変更してください。