質問: 元々は.htaccessに `SetEnv APP_TOOL 1`とべた書きしていたものを、 .bashrcで設定した環境変数を参照し、その設定値によって.htaccess上での挙動を分岐させたいです。 | APP_ENV | APP_TOOL | | --- | --- | | staging | 1 | | production | 設定無し | 上記設定のようにしたい場合、以下の書き方は正しいでしょうか? **.bashrc** ``` APP_ENV=staging export APP_ENV ``` **.htaccess** ``` SetEnvIf %{ENV:APP_ENV} staging APP_TOOL=1 ``` 皆様、どうぞご教授のほどよろしくお願いいたします。
回答: .bashrc のユーザーでログインした後、コマンドラインから httpd を起動しようとしているのでしょうか? apache ユーザーなど、システムユーザーの権限で httpd を起動する場合、環境変数は起動スクリプトや、起動スクリプトから読み込まれるファイルに設定すると思います。 例えば、CentOS であれば、/etc/sysconfig/httpd に。 また、SetEnvIf で attribute (比較対象)として環境変数を参照するときの書式は、**%{ENV:APP_ENV}** ではなく、**APP_ENV** でいいようです(%{ENV:APP_ENV} は mod_rewrite の書式)。 ただし、attribute (比較対象)に環境変数を参照する場合、それ以前に SetEnvIf で設定した環境変数しか利用できないようです。 つまり、httpd 起動時の環境変数は SetEnvIf では参照できません。 代替方法としては、 A-1. /etc/sysconfig/httpd で **APP_ENV=staging** を設定 A-2. .htaccess に `PassEnv APP_ENV` を設定し、CGI, SSI に渡す A-3. CGI, SSI 側で環境変数 APP_ENV によって処理を分ける または、 B-1. /etc/sysconfig/httpd で **APP_TOOL=1** を設定 B-2. .htaccess に `PassEnv APP_TOOL` を設定し、CGI, SSI に渡す などの方法が考えられます。