Apache 設定でサーバー環境変数を設定すると、組み込み関数を使用して PHP からその変数を読み取ることができます。
しかし、htaccess ファイルから変数を読み取ることはできますか?
私が htaccess で達成しようとしているのは、次のようなものです。
<If var=="stuff">
do things here
</if>
<if var=="different stuff">
do different things here
</if>
はい、そうです。
おそらく mod_setenvif 機能を使用したいので、そのモジュールを有効にする必要があります。
次に、次のようなことを行うだけです。
SetEnvIf Request_URI "\.gif$" image_type=gif
要求されimage_type
たgif
ファイル名が.gif
.
次に、次のように (RewriteCond のように) これにアクセスできます。
RewriteCond %{ENV:image_type} gif
RewriteRule ^(.*) $.gif
ここで完全なドキュメントを読むことができます: http://httpd.apache.org/docs/2.2/env.html
私の自宅のローカルホストを私の仕事のセットアップとは異なるものとして認識するために同様のものをセットアップするのに多くの問題があったので、ここに私がやったことがあります.
何よりもまず、 <IF ..>
ディレクティブは SetEnv を認識しません。http://httpd.apache.org/docs/current/env.htmlから: 「SetEnv ディレクティブは、リクエスト処理中に遅く実行されます。つまり、SetEnvIf や RewriteCond などのディレクティブは、それで設定された変数を認識しません。」
したがって、可能であれば SetEnvIf を使用してみてください。私は怠惰で、これを httpd.conf ファイルに入れただけです。ローカルホストで実行されていることを確認します-これは明らかにそうです-次に、変数を設定します。
SetEnvIf Server_Addr ^127\.0\.0\.1$ home_variable
次に、他の場所で、htaccess ファイルに次のように記述しました。
# IfVersion needs mod_version - you could do an ifmodule before all this i guess
# we use ifversion because If was introduced in apache 2.4
<IfVersion >= 2.4>
# check if the home variable exists/isn't: empty, "0", "off", "false", or "no"
<If "-T reqenv('home_variable')">
... do home-y stuff
</If>
<Else>
... do work-y stuff
</Else>
</IfVersion>
# fallback
<IfVersion < 2.4>
.. fallback?
</IfVersion>
または、環境ごとに 1 つの変数を設定して、特定の値を指定することもできます。
SetEnvIf Server_Addr ^127\.0\.0\.1$ check_location=home
その後、最初の<If ..>
ステートメントを除いて、残りは同じになります。
<If "%{ENV:check_location} == 'home'">....</If>
私は 2.4 のホーム環境と 2.2 の職場環境の間でこれらの両方をテストしました。両方とも mod_version が有効になっていました (したがって、ifmod を気にしませんでした)。
(私は 2 つ以上の環境でもテストしていませんが、Apache 2.4 は を提供する<ElseIf>
ので、それもオプションです)。
ドゥープ・ディ・ドゥ。
( -T 演算子などの詳細: http://httpd.apache.org/docs/current/expr.html )
Apache 2.4 では、 .htaccess ファイルなどでより強力なプログラムによる制御を行うために、新しい式構文と組み合わせて<If>
, <Else>
,ブロックが導入されました。<ElseIf>
これはテストされていませんが、表向きは動作します:
<If "%{MY_VAR} == 'my result'">
…
</If>