![Apache2 - 在 CGI 下通过 SetEnv 设置 PERL5LIB](https://linux22.com/image/510469/Apache2%20-%20%E5%9C%A8%20CGI%20%E4%B8%8B%E9%80%9A%E8%BF%87%20SetEnv%20%E8%AE%BE%E7%BD%AE%20PERL5LIB.png)
我的设置如下:我有一个运行不同虚拟主机的 Apache2 网络服务器,一个虚拟主机用于生产网站,另一个虚拟主机用于暂存/预览系统。两个虚拟主机都有不同的 DocumentRoots 和不同的 (Perl) CGI 文件夹。每个虚拟主机使用的模块应该位于不同的目录中,因此我执行了以下操作:
<VirtualHost...>
ServerName production
SetEnv PERL5LIB /home/production/modules
</VirtualHost>
<VirtualHost...>
ServerName staging
SetEnv PERL5LIB /home/staging/modules
</VirtualHost>
但是,我刚刚注意到,在我的 Perl CGI 脚本中,两个路径都填充到了我的 @INC 中,因此我无法将暂存模块与生产模块分开,例如,SetEnv 指令不仅限于单个虚拟主机,而且似乎可以在全球范围内发挥作用。
我该如何解决这个问题?
谢谢!Jonas
答案1
我发现了一种叫做设置环境变量它可用于根据请求标头设置环境变量。例如。
SetEnvIf Request_URI "\request-for-staging\" PERL5LIB=/home/staging/modules
但这可能太重了...所以你可以试试mod_rewrite的 [E=...] 选项。
希望有帮助:)
答案2
<VirtualHost ...>
ServerName dev1
PerlOptions +Parent
PerlSwitches -I/home/dev1/lib/perl
</VirtualHost>
<VirtualHost ...>
ServerName dev2
PerlOptions +Parent
PerlSwitches -I/home/dev2/lib/perl
</VirtualHost>