Php 有没有办法检查是谁或什么导致了重定向?

Php 有没有办法检查是谁或什么导致了重定向?,php,apache,redirect,Php,Apache,Redirect,我的项目(使用复杂框架/cms)基于PHP、.htaccess、JS等进行重定向。。。我在努力寻找是谁导致了一个特定的重定向。虽然我使用常用工具(RedirectChecker、浏览器开发工具…)看到重定向,但我看不到是谁/什么导致了重定向。有没有一个通用的方法来找出答案 foo.de->301->www.foo.de(.htaccess-line:4711) www.foo.de->301->www.foo.com/de/(somefile.php行:666) 注意:我可以访问服务器。您无

我的项目(使用复杂框架/cms)基于PHP、.htaccess、JS等进行重定向。。。我在努力寻找是谁导致了一个特定的重定向。虽然我使用常用工具(RedirectChecker、浏览器开发工具…)看到重定向,但我看不到是谁/什么导致了重定向。有没有一个通用的方法来找出答案

  • foo.de->301->www.foo.de(.htaccess-line:4711)
  • www.foo.de->301->www.foo.com/de/(somefile.php行:666)

注意:我可以访问服务器。

您无法从客户端检查
服务器端重定向的触发方式。但是,您可以做的是,每次重定向时都可以添加自定义
HTTP头

PHP中的示例:

header('HTTP/1.1 301被PHP脚本永久移动')
应该出现在Firebug或其他inspector工具中

备选方案(尚未尝试)是:


对于.htaccess重定向,可以启用“重写日志”。对于php重写,您可以做的是强制输出到浏览器(请参阅和)。当框架尝试设置头(例如位置头)时,将生成一个错误

您还可以查看覆盖header函数的步骤,检查location header是否已发送并将其记录到文件中,或者引发异常或错误。您可以使用。您将使用
PECL-apd>=0.2
来使用
override\u函数
一种基本的(但在某种意义上是最正确的)处理方法,即用
my\u header()替换项目中出现的所有
header()
并写入
my_header
,以便它记录其参数并将其进一步传递到php的
header
。如果您的FW使用名称空间,您只需将自己的
头添加到NS即可


如果您无法更改FW代码,则需要runkit或sorts来钩住全局函数。

是的,cms/framework中有一些部分是这样做的(php方面),但并非所有,不幸的是,我无法修改每个重定向。这种东西没有痕迹吗?看看重定向是由PHP、JS、HTML meta还是.htaccess执行就足够了。您可以跟踪JS和HTML重定向,只需使用浏览器的一些插件来禁用JS和meta重定向,您就会知道。对于服务器端重定向,您所能做的就是编辑每个重定向,并添加将告诉您更多信息的cutom头。禁用除要检查的重定向之外的所有重定向
header('HTTP/1.1 301 Moved Permanently');
header('Redirected from index.php');