在生产脚本中找到重定向

时间:2017-09-01 01:16:48

标签: php redirect

我继承了在一个非常大的php网站上工作。我们遇到了某些问题导致某些页面导致奇怪的重定向问题。我正在寻找一些想法,以帮助在PHP代码中找到这些重定向。

我们没有托管该网站,因此我们没有shell访问权限。最初我要挂钩到关闭函数或析构函数并记录调用堆栈,但调用堆栈看起来只包含exit函数。接下来我一直在寻找覆盖php'header'函数的方法(最有可能通过命名空间),但这会涉及将命名空间添加到太多文件中。

是否有任何PHP技术,没有在任何地方放置死语句或下载所有源代码并在其上运行grep,这将允许查找代码中的哪个重定向被触发?

1 个答案:

答案 0 :(得分:0)

<强>第一

尽可能避免在实时制作网站上进行调试。如果你必须,那么我会设置“门”以防止其他人看到你的测试。您可以通过检查IP地址或自定义GET变量来执行此操作。以下是两个PHP示例。

if ($_SERVER["REMOTE_ADDR"] == "xxx.xxx.xxx.xxx") {
    // Run Your Code Here
}

if (!empty($_GET["my_custom_get_var"])) {
    // Run Your Code Here
}

技术1 - 特定于PHP

有时,找到某些内容或测试某些内容是否有效的最简单方法是尝试打破它。在这种情况下,为了使PHP重定向成功(使用PHP header函数),它要求在进行调用之前没有向浏览器发送头信息。首先,通过在该调用之前输出任何内容来查看是否可以触发可怕的headers already sent警告。如果您可以触发该警告,您应该能够获得重定向发生位置的行号和文件。从那里你可以debug_backtrace()找到重定向的罪魁祸首。

如果启用了输出缓冲,则需要暂时​​禁用它或将其刷新以进行测试。

技术2 - 特定于WordPress

我想我也会投入一个WordPress解决方案,以防你在一个非常大的WordPress网站上工作。只要导致重定向的代码/插件使用WordPress的核心,那么您应该可以使用他们的钩子系统。以下是您可以从活动模板/主题中的“functions.php”文件运行的测试 - 它应该显示导致重定向的堆栈跟踪。

function my_custom_function ($location, $status) {
    print_r(debug_backtrace());
    exit;
}
add_filter("wp_redirect", "my_custom_function" , 10, 2);