質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
.htaccess

Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

Q&A

解決済

1回答

3943閲覧

.htaccessでのSetEnvIfの書き方について

FLAT4

総合スコア9

.htaccess

Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

0グッド

0クリップ

投稿2017/12/04 06:52

元々は.htaccessに SetEnv APP_TOOL 1とべた書きしていたものを、
.bashrcで設定した環境変数を参照し、その設定値によって.htaccess上での挙動を分岐させたいです。

APP_ENVAPP_TOOL
staging1
production設定無し

上記設定のようにしたい場合、以下の書き方は正しいでしょうか?

.bashrc

APP_ENV=staging export APP_ENV

.htaccess

SetEnvIf %{ENV:APP_ENV} staging APP_TOOL=1

皆様、どうぞご教授のほどよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

.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 に渡す

などの方法が考えられます。

投稿2017/12/05 15:56

TaichiYanagiya

総合スコア12141

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FLAT4

2017/12/06 06:25

詳細なご回答ありがとうございます! 仰る通り、ログイン用ユーザの.bashrcにAPP_ENV = stagingを設定し、apache ユーザ権限でhttpdを起動しようとしていました。 SetEnvIfの書き方についてもご教授ありがとうございます。mod_rewriteの書式が混ざってしまっていたのですね… 頂いた方法で検討させて頂きます。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問