.htaccessからPHPに環境変数を渡そうとしています。これは私のローカルWAMPサーバー上で正常に動作しますが、私のWebサイトがホストされているサーバーでは、理由がなく失敗します。環境変数が.htaccessからPHPに渡されない
は、ここに私のテスト構成です:
.htaccessファイル:
はSetEnv TEST_VARIABLE test_value
test.phpを:私のローカルサーバー上
<pre>
getenv('TEST_VARIABLE') = <?php print getenv('TEST_VARIABLE'); ?>
getenv('REDIRECT_TEST_VARIABLE') = <?php print getenv('REDIRECT_TEST_VARIABLE'); ?>
</pre>
、正しくtest.phpを得ることが返されます。
getenv('TEST_VARIABLE') = test_value
getenv('REDIRECT_TEST_VARIABLE') =
しかし、本番サーバー、それが返されます:私は除外しました
getenv('TEST_VARIABLE') =
getenv('REDIRECT_TEST_VARIABLE') =
もの:
mod_env
をホストでは有効になって/インストールされていません。できない。なぜなら、SetEnv
は認識されず、.htaccessを処理しているうちに500を受け取るからだ。AllowOverrides
httpd.conf
にはFileInfo
が含まれていません。できない。なぜなら、ApacheはSetEnv
指示文に遭遇したときにApacheが "SetEnv not allowed here"というエラーをスローし、再び500を受け取るからです。variables_order
には 'E'が含まれていません。これは、$_ENV
のスーパーグローバルが空であることを示していますが、getenv()
はこれらの変数の値を返しません。すべての環境が不正です。
getenv('PATH')
とgetenv('SERVER_NAME')
は依然として有効な値を返すため、できません。
この時点で、どのような構成がこれを引き起こす可能性があるのかは分かりません。
SetEnv _is_ .htaccessコマンドですが、あなたはそれを釘付けにしました。変数に接頭辞としてHTTP_を付けると、すべてが機能しました。私はその要件が "公式な"ソースに書かれているのを見たことがない。これは奇妙だが、もしうまくいけば、それに触れないのだろうか? – nitwit
一部のサーバーでRewriteRule。* - (E = HTTP_VAR:VAL)と同じ要件が適用されるようです。 – Chris
はちょうどこの同じ問題に遭遇したので、どこにも記載されていないというのは奇妙です。私の場合、これはPHPスクリプトではなくPerlで行われます。 – insaner