httpd.confの$ {var}と%{var}の違いは何ですか?
ほとんどすべて。「$
xを実行する、%
yを実行する」という厳格な規則はありません。それらは、どこでどのように使用されるかによって異なることを行うからです。
$ {VAR}は、mod_rewriteディレクティブの場合を除き、httpd.confのすべての場所で使用されます
いいえ-mod_rewrite関連の行であっても、構成全体のすべての場所で${VAR}
置換として適用されます。これらは、httpdバイナリに渡されるオプションまたはディレクティブを使用して、起動時にのみ定義できます。-D
Define
これは、これらの変数に:
文字を含めることはできませんが、RewriteMap
使用法には:
文字を含める必要があるためです。これにより、$
競合なしで非常に異なる方法でを使用できるようになります。パーサーは:
を認識し、それを置き換えることになっていないことを認識しています。
同じhttpd.confで使用するために、SetEnvIfディレクティブを使用してhttpd.confで設定された変数は、変数が%_ {var}として使用されるmod_rewriteディレクティブで使用される場合を除いて、$ {var}として使用されますか?
いいえ。環境変数は、-D
またはを介して設定される変数と同じではありませんDefine
。これらは、SetEnvIf
特定のディレクティブのみが使用する、完全に独立した要求ごとのコンテキストです(これらは、設定しているものです)。それらはサポートされている場所で具体的に言及されています-mod_rewriteではサポートされて%{ENV:variable}
おり、ログではサポートされて%{variable}e
おり、多くのディレクティブには次のようなロジックチェックがありますenv=variable
。
だから基本的に; これは混乱を招く混乱です。過去数十年にわたるWebサーバーの歴史の証です。おそらくあなたを混乱させる主なものは、mod_rewriteの構文が、構成の他のどの部分にも拡張されないことです。それはすべて異なります。これらすべてから取る主なポイントは、これらすべてを$
意味のあるものにする統治的な「ルール」がないということ$
です。ある場所でのa は、別の場所でのaとは完全に異なるものを意味します。
いくつかの便利な参照点:
- あなたは、Apacheの起動時に、静的変数を設定し、使用するために探している場合
Define
と、${VAR}
Apacheの起動時に、一回交換します。これは、開発環境と本番環境の間で構成ファイルを共有するような場合に主に役立ちますが、常にを含む$
from の使用と混同しないでください。RewriteMap
:
- 特定のリクエストで変数を操作する場合は、環境変数が目的ですが、特定のディレクティブで使用するときにそれらを取得するために使用する構文について想定することはできません。そのディレクティブのドキュメントを確認する必要があります。
- mod_rewriteに問題がある場合は、変数とその構文について知っていると思ったすべてのものを捨ててください。には独自の変数セットがあり
%{VAR}
、を使用して「通常の」環境変数を取得でき、を使用して環境変数を%{ENV:VAR}
設定できます[E=VAR]
。