脚本执行前,我可以全局设置$ _SERVER 吗?

我正在将许多网站从旧的服务器configuration迁移到新的服务器configuration。 每个站点都基于一个类似的(但可悲的是不相同)的代码库,使用mod_rewrite的URL。

  • Ubuntu 8.04 LTS => Ubuntu 12.04 LTS
  • Apache 2.22.8 => Apache 2.2.22
  • PHP 5.2(FastCGI)=> PHP 5.3(PHP5-FPM)

大部分工作就像一个魅力,但在新的configuration$ _SERVER ['REDIRECT_URL']不再设置,代码由于依赖于这个全局variables失败。

据我所知,当redirect发生时,这个variables被Apache设置。 显然这不是现在发生,但我正在努力寻找原因。

  • 是Apache升级还是(我猜)从PHP FastCGI切换到PHP5-FPM?
  • 我如何得到这个variables?

我真的不必编辑每个站点上的代码,所以我会设置一个全局的PHP auto_prepend,如果有必要的话,但理想情况下,我想修复服务器configuration,并将其置于首位。

潜在的相关:我现在也有一些新的$ _SERVERvariables,即REDIRECT_SCRIPT_URL和REDIRECT_REDIRECT_SCRIPT_URL。 这些似乎有我想要的REDIRECT_URL的正确数据,但也似乎表明有两个内部redirect发生以前没有 – 谷歌searchREDIRECT_REDIRECT_SCRIPT_URL只返回随机var_dump输出。 SCRIPT_URL是新的REDIRECT_URL吗?

编辑1

再次检查REDIRECT_URL是(现在)设置,但总是为'index.php'(mod_rewrite目标),而不是预期的types的URL。 我已经诉诸使用PHP auto_prepend_file手动设置所需的variables。

我不确定我第一次错过了它,但在此期间我做了一些改变,所以我想有一个外部机会,它不在那里。 道歉,如果这个误导任何人。

编辑2

为了解决下面提到的ErrorDocument,使用的mod_rewrite规则是:

RewriteRule ^(.*)$ /index.php?url=$1 [QSA,L] 

$ _GET ['url']variables被设置,所以规则必须工作。

要清楚的是,在这个阶段,我已经走了最初提到的auto_prepend_file解决方法。

REDIRECT_URL仅由Apache Web服务器设置,并且仅在某些情况下 。 这可能不是你的代码应该依赖的东西。 据我所知,最好的解决办法是修复bug的PHP代码; 你不能真的强迫这个总是在Apache中设置。

根据PHP的文档:

$ _SERVER是包含标题,path和脚本位置等信息的数组。 该数组中的条目由Web服务器创build。 不能保证每个Web服务器都会提供这些服务器。 服务器可能会省略一些,或者提供这里没有列出的其他人。 也就是说,大量的这些variables在“ CGI / 1.1规范”中有说明 ,所以你应该能够期待这些。

所以看起来并不是所有的$_SERVER超全局variables都像平台不可知的那样。 $_SERVER['REQUEST_URI']似乎是所有主要networking服务器一致定义的一个这样的值,所以您可能想尝试使用它。

对于我们其中一个redirect到index.php的项目中丢失的图像,我只是使用了这个修补程序:

url: http : //www.domanXY.de/image.php? file = var/binaries/store/8dfaadde-5309-4a35-8f9a-d8b9cd807aae.jpg&options= & options = resize_outer( 320,150) ;sharpen( 64) ;

 <?php //image.php (newly created) $_SERVER['REDIRECT_URL'] = "image.php"; include "index.php"; 

如果你想要一个全局的解决scheme,我认为你必须使用explode()等,并使用另一个给定的variables,如$ _SERVER ['REQUEST_URI']。

你可以设置一个php自动prepend文件来包含设置这个variables的一小段PHP代码。