【问题标题】:Is there a way to check who or what is causing a redirect?有没有办法检查谁或什么导致了重定向?
【发布时间】:2015-02-05 10:45:39
【问题描述】:

我的项目(使用复杂的框架/cms)会基于 PHP、.htaccess、JS 等进行重定向……而我正在努力寻找导致特定重定向的人。虽然我使用常用​​工具(RedirectChecker、Browser-Dev-Tools ...)看到重定向,但我看不到是谁/是什么导致了它。有没有一种通用的方法来找出例如

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

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

【问题讨论】:

  • 禁用除您要检查的重定向之外的所有重定向

标签: php apache redirect


【解决方案1】:

您无法从客户端检查server-sided redirection 是如何触发的。但是,您可以做的是每次重定向时都可以添加自定义HTTP Headers

PHP 中的示例:

header('HTTP/1.1 301 Moved Permanently by PHP script');
应该出现在 Firebug 或其他检查器工具中。

替代(没试过)是:

header('HTTP/1.1 301 Moved Permanently');
header('Redirected from index.php');

【讨论】:

  • 是的,cms/framework 中有一些部分是这样做的(php 方面),但不是全部,不幸的是我无法修改每个重定向。就没有那种东西的踪迹吗?看看重定向是由 PHP、JS、HTML-meta 还是 .htaccess 执行的可能就足够了。
  • 您可以跟踪 JS 和 HTML 重定向,只需为您的浏览器使用一些插件来禁用 JS 和 META 重定向,您就会知道。对于服务器端重定向,您所能做的就是编辑每个重定向并添加会告诉您更多信息的自定义标头。
【解决方案2】:

一种激进的(但在某种意义上是最正确的)处理方法是将项目中所有出现的header() 替换为my_header() 并写入my_header 以便它记录其参数并进一步传递它们到php的header。如果您的 FW 使用命名空间,您只需将自己的 header 添加到 NS。

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

【讨论】:

    【解决方案3】:

    对于 .htaccess 重定向,您可以打开 Rewrite loggin RewriteLog。对于 php 重写,您可以做的是强制输出到浏览器(参见 flushob_flush)。当框架尝试设置标头时会产生错误,例如位置标头。

    您还可以查看override_function 以覆盖标头功能,检查位置标头是否已发送并将其记录到文件或抛出异常或错误。您可以使用debug_backtrace 获取跟踪。您将PECL apd >= 0.2 使用override_function

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-25
      • 2014-12-22
      相关资源
      最近更新 更多