我正在将许多站点从旧服务器配置迁移到新服务器。每个站点都使用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)
大多数情况下,它的工作方式像一个超级按钮,但是在新配置中,不再设置$ _SERVER ['REDIRECT_URL'],并且由于依赖于此全局变量,导致代码失败。
据我了解,当重定向发生时,此变量由Apache设置。显然,这现在还没有发生,但是我正在努力寻找原因。
- 是Apache升级,还是(我猜)从PHP FastCGI切换到PHP5-FPM?
- 我如何找回这个变量?
我真的不想在每个站点上都编辑代码,因此如有必要,我将设置一个全局PHP auto_prepend,但理想情况下,我想修复服务器配置并将其设置为第一位。
可能相关:我现在还有几个新的$ _SERVER变量,即REDIRECT_SCRIPT_URL和REDIRECT_REDIRECT_SCRIPT_URL。这些似乎具有我想要的用于REDIRECT_URL的正确数据,但似乎也表明发生了两次以前没有发生过的内部重定向-Google搜索REDIRECT_REDIRECT_SCRIPT_URL只会返回随机的var_dump输出。SCRIPT_URL是新的REDIRECT_URL吗?
编辑1
再次检查REDIRECT_URL(现在)已设置,但始终设置为“ index.php”(mod_rewrite目标),而不是预期的键入URL。我求助于使用PHP auto_prepend_file手动设置所需的变量。
我不确定我是如何第一次错过它,但是在此期间我进行了几处更改,所以我认为外面没有机会。抱歉,如果这误导任何人。
编辑2
为了解决下面提到的ErrorDocument,使用的mod_rewrite规则是:
RewriteRule ^(.*)$ /index.php?url=$1 [QSA,L]
$ _GET ['url']变量已设置,因此该规则必须有效。
需要明确的是,在此阶段,我已经采用了我最初提到的auto_prepend_file解决方法。