私のセットアップは次のとおりです。1つのApache2Webサーバーが異なる仮想ホストを実行しています。1つの仮想ホストは本番Webサイト用で、もう1つの仮想ホストはステージング/プレビューシステム用です。両方のvhostには、異なるDocumentRootsと異なる(Perl)CGIフォルダーがあります。これらの各vhostに使用されるモジュールは異なるディレクトリにあるはずなので、次のようにしました。
<VirtualHost...>
ServerName production
SetEnv Perl5LIB /home/production/modules
</VirtualHost>
<VirtualHost...>
ServerName staging
SetEnv Perl5LIB /home/staging/modules
</VirtualHost>
ただし、Perl CGIスクリプトでは、両方のパスが@INCに入力されるため、ステージングモジュールを本番モジュールから分離できないことに気づきました。 SetEnvディレクティブは、単一の仮想ホストに限定されていませんが、グローバルに機能しているようです。
どうすればこれを解決できますか?
ありがとう!ジョナス
SetEnvIf と呼ばれるものを見つけました。これは、リクエストヘッダーに基づいて環境変数を設定するために使用できます。例えば。
SetEnvIf Request_URI "\request-for-staging\" Perl5LIB=/home/staging/modules
しかし、それは多分重すぎるかもしれません...だからあなたは mod_rewrite の[E = ...]オプションを試すことができます。
お役に立てば幸いです:)
<VirtualHost ...>
ServerName dev1
PerlOptions +Parent
PerlSwitches -I/home/dev1/lib/Perl
</VirtualHost>
<VirtualHost ...>
ServerName dev2
PerlOptions +Parent
PerlSwitches -I/home/dev2/lib/Perl
</VirtualHost>