2013-07-09 12 views
31

.htaccessファイルに環境変数を設定してPHPで取得しようとしています。私はここで他のスレッドの束を見てきましたが、これまでに試したことはすべて失敗しました。.htaccessで環境変数を設定し、PHPで取得します。

私は、.htaccessファイルに次の行を追加しました:私はのgetenv()PHP関数を使用してこの値を取得しようとしている

SetEnv SPECIAL_PATH /foo/bin 

<?php $specialPath = getenv('SPECIAL_PATH'); ?> 

私は(のphpinfoをrunnedしています)使用可能な環境変数のリストを表示するには、SPECIAL_PATHは存在しません。私はなぜこれがうまくいかないのか困惑している。

ありがとうございました!

+1

にいくつかの深さでカバー

if (getenv("HTTP_REFERER") !== FALSE) { $httpref = getenv("HTTP_REFERER"); } else { $httpref = ''; } if (isset($_SERVER['REDIRECT_STATUS'])) { $status = $_SERVER['REDIRECT_STATUS']; } else { $status = ''; } if (isset($_SERVER['REMOTE_HOST'])) { $remoteHost = $_SERVER['REMOTE_HOST']; } else { $remoteHost = ''; } if (isset($_SERVER['REDIRECT_QUERY_STRING'])) { $querystring = $_SERVER['REDIRECT_QUERY_STRING']; } else { $querystring = ''; } if (isset($_SERVER['REDIRECT_noUserAgent'])) { $htaccessErrors[] = 'NoUserAgent'; } if (getenv("REDIRECT_badQueryString") !== FALSE) { /* must exactly match what shows up in $_SERVER, is case sensitive (e.g. badQueryString not BadQueryString) */ $htaccessErrors[] = 'badQueryString:'.getenv("REDIRECT_badQueryString"); } 

あなたはhtaccessのファイルは、その特定のディレクトリに対して有効になっていることを確認していますか?その効果が容易に確認できる別の指令を試してください。 – goat

+1

この他のご質問はあなたを助けますか? http://stackoverflow.com/questions/3780866/why-is-my-env-empty – luchosrock

答えて

23

設定に.htaccessでAllowOverridesが設定されていると仮定すると、Apacheでmod_envを有効にする必要があります。

Apache - mod_env

+0

私はこれが問題だと思います。私はApacheモジュールを有効にする方法を理解しようとしています(私はサーバ関連の何かを持つ初心者です)。本当にありがとう。 –

+2

あなたのhttpd.confがどこにあるかは、デフォルトでは通常 "conf/httpd.conf"です - '#LoadModule env_module modules/mod_env.so'行を探して#を削除してから、apacheを再起動してください。 –

6

Apacheのドキュメントのカスタムerror.htmlは、ページ

エラー処理に渡される環境変数をカバーREDIRECT_環境変数が前にリダイレクトするように存在していた環境変数から作成されている」と言います。彼らがして名前を変更されていますREDIRECT_プレフィックス、つまりHTTP_USER_AGENTREDIRECT_HTTP_USER_AGENTになります。

「ErrorDocumentターゲットが外部リダイレクト(http:のようなスキーム名で始まるものがサーバーと同じホストを参照している場合でも)」の場合、これらのいずれも設定されません。

SetEnvについて:「この指令で設定された内部環境変数は、アクセス制御やURIからファイルへのマッピングなど、ほとんどの初期要求処理指令が実行された後に設定されます。 RewriteRuleディレクティブなどの処理の初期段階に入力する代わりに、代わりにSetEnvIfを使用して環境変数を設定する必要があります。 SetEnv HTTP_MY_VARIABLE "my value"はここ

設定やサーバ環境変数を使用していくつかの.htaccessの方法はされて、私は生鮮の変更から撮影:一部のサーバーで

、ユーザーが宣言した環境変数は、セキュリティ上の目的、例えばのために「HTTP_」で開始する必要があります

SetEnv myServerName %{SERVER_NAME} 

RewriteCond %{QUERY_STRING} (base64_encode|localhost|mosconfig|open_basedir) [NC,OR] 
RewriteCond %{QUERY_STRING} (boot\.ini|echo.*kae|etc/passwd) [NC,OR] 
RewriteCond %{QUERY_STRING} (GLOBALS|REQUEST)(=|\[|%) [NC] 
RewriteRule .* - [E=badQueryString:%0--%1--%2,F,L] 

SetEnvIfNoCase User-Agent ^$ noUserAgent 
SetEnvIfNoCase User-Agent (binlar|casper|cmsworldmap|comodo|diavol|dotbot|feedfinder|flicky|ia_archiver|jakarta|kmccrew|nutch|planetwork|purebot|pycurl|skygrid|sucker|turnit|vikspider|zmeu) badUserAgent=$1 

<limit GET POST PUT> 
    Order Allow,Deny 
    Allow from all 
    Deny from env=badUserAgent 
</limit> 

お知らせ偶然にの使用、例えば:プレス5Gブラックリスト/ファイアウォールhttp://perishablepress.com/5g-blacklist-2013/は、環境変数のレポートを使用します$ 0 - %1 - %2。 %0は完全な文字列を与え、%1は最初の括弧で囲まれた文からの一致を与え、%2は2番目の括弧で囲まれた文からの一致を与えます。ハイフンは、パラメータ結果を視覚的に分離するためのリテラル表示文字です(そこにスペースを入れる方法はありません)。


環境変数(私の場合は403.phpと404.phpから)にアクセスするためのいくつかのPHPメソッドがあります。 あなたは(のphpinfoで見ていない注)が、$ サーバ内に、また、その403/404リダイレクトを使用して変数がREDIRECT に注意を接頭辞を取得することを、QUERY_STRINGはこれが簡単にできたものである をREDIRECT_QUERY_STRINGなり、サーバーに依存するので、実際の値は$ _SERVERをチェックしてください。例えば、私はhttp://lcblog.lernerconsult.com/2013-server-alert-you-file-not-found-errors/

関連する問題