跟踪apache中的无限循环重定向

时间:2010-07-03 04:28:13

标签: php apache .htaccess redirect infinite-loop

我有一个PHP脚本导致无限重定向循环,我不知道如何检测它。有没有办法检测到这个?我可以在我的.htaccess中添加任何命令来将重定向写入日志吗?

提前感谢,

3 个答案:

答案 0 :(得分:1)

以简单的方式在PHP中进行调试实际上是一项繁琐的工作。你需要的是你应该在每一行之后提供一些“ echo ”语句(输出一个虚拟文本),然后是“ exit ”命令语句。

然后重定向循环将不起作用,因为“exit”使程序计数器停止运行,并且o现在可以按顺序调试出错的地方。

关于“.htaccess”命令,你不需要任何这样的东西。请检查您的根文件夹中的“error.log”文件,其中托管了您网站的index.php文件。如果您在某个文本编辑器(如Wordpad)中打开此文件,您将看到所有错误列表,以及日期和时间。时间。

编辑(提供一个例子): -
假设你有一个如下页面: -

<?php
session_start();
include_once("includes/header.php");

$var1 = 'blah blah';
// some code

$var2 = 'some more blah blah';
// some code again

// may be some more code

include_once("includes/footer.php");
?>

现在以这种方式更改代码以进行调试: -

<?php
session_start();
echo 'test 1';
exit;

// other code of yours comes after this line
?>

如果有效,请再次更改为: -

<?php
session_start();
include_once("includes/header.php");
echo 'test 2';
exit;

// other code of yours comes after this line
?>

现在,如果它有效,这意味着你在“header.php”文件中没有问题,否则你在包含的文件&amp;中遇到了一些问题。你需要在“header.php”文件中以相同的方式开始调试。

希望它有所帮助。

答案 1 :(得分:0)

更改

的实例
header ("Location: foo.php");

//header ("Location: foo.php");
echo "redirecting to foo.php on line ## of bar.php"; 
exit;

(很可能foo = bar,但你可能有一个包含多个页面的循环......)

答案 2 :(得分:0)

我目前正在努力进行无限重定向。由于应用程序和下班后编程周期的复杂性,并非所有重定向都以正确的方式进行。

如果您在开头设置会话(比如说自动加载器文件),则无法简单地检查会话是否自行循环。

我的建议是将变量重定向写入外部文件(即使用file_put_contents或fwrite),这样即使浏览器检测到一些误解,您也可以执行。即使您在屏幕上看不到任何回声,写入外部文件也会为您提供执行操作的机会。

无限重定向通常来自编写代码时的不必要的复杂性以及形成项目结构时的误解。

祝你好运!