Bar*_*rry 8 php php-fpm apache-2.2
我正在将许多站点从旧服务器配置迁移到新服务器配置。每个站点都基于类似(但遗憾的是不完全相同)的代码库,使用 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'] 变量已设置,因此规则必须有效。
需要明确的是,在这个阶段,我已经使用了我最初提到的 auto_prepend_file 解决方法。
根据 PHP 的文档:
\n\n\n\n\n$_SERVER 是一个包含标头、路径和脚本位置等信息的数组。该数组中的条目由 Web 服务器创建。无法保证每个网络服务器都会提供其中任何一个;服务器可能会省略一些,或提供此处未列出的其他内容。也就是说, \xc2\xbb CGI/1.1 规范中考虑了大量这些变量,因此您应该能够预料到这些变量。
\n
因此,似乎并非所有$_SERVER超全局变量都像人们期望的那样与平台无关。$_SERVER[\'REQUEST_URI\']似乎是所有主要网络服务器一致定义的这样一个值,因此您可能想尝试使用它。
| 归档时间: |
|
| 查看次数: |
4175 次 |
| 最近记录: |