web-dev-qa-db-ja.com

phpをCGIとして実行しているときに、Apacheが環境変数の前にREDIRECT_を追加しないようにするにはどうすればよいですか?

私はMediaTempleのGridServiceをいくつかの比較的軽量なPHPサイトの本番環境として使用しています。テストおよびステージング環境をセットアップするプロセスはやや面倒で、スタッフがショートカットを使用することになります。 GridServiceと同様の環境を提供する品質管理環境をまとめようとしていますが、自動展開プロセスにより密接に接続できます(GridServiceで新しい環境をプロビジョニングするには、Webインターフェイスを使用する必要があります。mod_vhost_aliasでは許可されます。テストURLのサブドメインであるディレクトリを作成します)。

私は非常に近いですが、問題が発生しました-PHP CGIとして実行すると、ApacheはSetEnvを使用して.htaccess(GridServiceをシミュレートしていることを思い出してください)に設定した変数の前にREDIRECT_を自動的に追加します。 例えば:

.htaccess

_SetEnv HTTP_TEST_VAR "Some Value"
_

PHP

_echo getenv('HTTP_TEST_VAR'); // prints ""
echo getenv('REDIRECT_HTTP_TEST_VAR'); // prints "Some Value"
_

これは、GridServiceで発生しないことを除いて、大したことではありません(コードを回避できます)。また、同じコードパスを使用することをお勧めします(コードにスイッチングロジックを追加すると、すべてのポイントが無効になります。コードベースから構成を取得するために行った作業)。

残りのバックグラウンドでは、Ubuntuを実行している新しい(2週間前の)(ve)インスタンスを使用し、aptからApacheとすべての依存関係を取得し、PHP(5.3.15) )GridServiceの<?php phpinfo() ?>からのconfigure文字列からdb4サポートを差し引いたものを使用します。

助けていただければ幸いです。ありがとう!

6
Kurt

それが良い解決策になるかどうかはわかりませんが、PHP FastCGIモード(mod_fastcgi)で実行すると、REDIRECT_を前に付けなくてもSetEnv変数で問題なく実行されます。

PHP CGIモードで実行している場合と同じ問題があり、FastCGIに切り替えることで解決しました。

5

事実上リダイレクトであるため、php-cgiでこの動作を変更できるとは思いません。ただし、php getenv()関数の戻り値に注意してください

環境変数varnameの値を返します。環境変数varnameが存在しない場合はFALSEを返します。

そのため、REDIRECT_であるかどうかに関係なく、値を返す関数を簡単に作成できます。

2
user9517