如何防止Apache运行PHP为CGI时,将REDIRECT_预加到环境variables?

我一直在使用MediaTemple的GridService作为一个相对轻量级PHP站点的生产环境。 设置testing和临时环境的过程很麻烦,会导致员工走捷径,所以我试图把一个质量控制环境放在一起,为GridService提供一个类似的环境,但是这使得我可以更紧密地把它与自动部署过程(在GridService中configuration新的环境需要使用Web界面; mod_vhost_alias只允许我们创build我们的testingurl的子目录)。

我非常非常接近,但是遇到了一个问题 – PHP以CGI的forms运行,Apache自动将REDIRECT_预设为使用SetEnv在.htaccess中设置的任何variables(记住,我正在模拟GridService)。 例如:

的.htaccess

SetEnv HTTP_TEST_VAR "Some Value" 

PHP

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

这不会是一个大问题(我们可以在代码周围),除了GridService中不会发生这种情况,我真的更希望有相同的代码path(向代码中添加切换逻辑将打败所有我们已经完成了从代码库中获取configuration的工作)。

在后台的其余部分,我使用了一个运行Ubuntu的全新(2周)(ve)实例,从apt获得了apache和所有的依赖关系,并使用来自<?php phpinfo() ?>的configurationstring构build了PHP(5.3.15) <?php phpinfo() ?>在GridService上,减去db4的支持。

我真的很感激任何帮助。 谢谢!

不知道这是否是一个好的解决scheme,但是运行在FastCGI模式下的PHP(mod_fastcgi)在SetEnvvariables下运行正常,而不需要在REDIRECT_之前。

与在CGI模式下运行的PHP有相同的问题,通过切换到FastCGI解决。

我不认为你可以改变这种行为与PHP-CGI实际上是一个redirect。 注意虽然php getenv()函数返回值

返回环境variablesvarname的值,如果环境variablesvarname不存在,则返回FALSE。

所以你可以很容易地构造一个返回值是否为REDIRECT_的函数。