我正在将许多站点从旧服务器配置迁移到新服务器配置。每个站点都基于类似(但遗憾的是不完全相同)的代码库,使用 mod_rewrite URL。
大多数情况下都像魅力一样工作,但在新配置中 $_SERVER['REDIRECT_URL'] 不再设置,并且代码由于依赖于这个全局变量而失败。
据我了解,当发生重定向时,该变量由 Apache 设置。显然现在这不会发生,但我正在努力寻找原因。
我真的不想在每个站点上编辑代码,所以我会在必要时设置一个全局 PHP auto_prepend,但理想情况下我想修复服务器配置并首先设置它。
可能相关:我现在还有几个新的 $_SERVER 变量,即 REDIRECT_SCRIPT_URL 和 REDIRECT_REDIRECT_SCRIPT_URL。这些似乎具有我想要的 REDIRECT_URL 的正确数据,但似乎也表明发生了两个以前没有的内部重定向 - Google 搜索 REDIRECT_REDIRECT_SCRIPT_URL 仅返回随机 var_dump 输出。SCRIPT_URL 是新的 REDIRECT_URL 吗?
再次检查 REDIRECT_URL 已(现在)设置,但始终设置为“index.php”(mod_rewrite 目标)而不是预期的键入 URL。我已经使用 PHP auto_prepend_file 来手动设置所需的变量。
我不确定我是如何在第一轮错过它的,但在此期间我做了一些更改,所以我认为它不存在的外部机会。如果这误导了任何人,我们深表歉意。
为了解决下面提到的 ErrorDocument,使用的 mod_rewrite 规则是:
RewriteRule ^(.*)$ /index.php?url=$1 [QSA,L]
Run Code Online (Sandbox Code Playgroud)
$_GET['url'] 变量已设置,因此规则必须有效。 …