修复重定向循环?

时间:2013-12-10 17:14:21

标签: php redirect-loop

我在index.php页面中有以下代码:

 <?php include("/includes/widgets.php") ?>

在我的widgets.php页面中:

<?php
     header("Location: /");
?>

我想要实现的目的是在用户访问时重定向,但允许包含它。

但是我收到以下错误:

  

网页有重定向循环

如何修复/阻止重定向循环,但仍然重定向用户而不是服务器。

5 个答案:

答案 0 :(得分:1)

我想我知道你需要什么:)

将代码索引文件更改为下一个

define("IS_INDEX", true);
include("/includes/widgets.php"

将widgets.php的代码更改为下一个

if (!defined("IS_INDEX")) {
    header("Location: /");
    exit();
}

答案 1 :(得分:1)

将widgets.php文件放在HTTP客户端无法访问的文件夹中。即,在apache webserver上,要么将它放在文档根目录上(进入它的父目录),要么使用.htaccess文件阻止用户访问它。

e.g。

deny from all

答案 2 :(得分:0)

问题是您要重定向回同一页面,然后再次重新定位,再次重新定向。

一个简单的解决方法是将重定向包装在if中,如果它们不在索引页面上,则仅重定向;但这只是修补看起来像建筑问题的东西。

类似的东西:

if (ltrim($_SERVER['REQUEST_URI'], '/') != 'index.php')
    header('Location: index.php');

答案 3 :(得分:0)

一种方法是检查加载文件的__FILE__是否与$_SERVER['REQUEST_URI'](或$_SERVER['PHP_SELF'])中所包含的请求文件相匹配。 / p>

我在我们的开发站点上使用这个页面,通常包含该页面以将输出作为调试。

if(basename($_SERVER['PHP_SELF'])===basename(__FILE__)){
    //do some debugging
}

通常你不会使用basename,但是这是在非公开的开发站点上,并且该文件有一个非常独特的名称所以我不担心该文件被包含在另一个具有相同名称或任何名称的文件中

答案 4 :(得分:-1)

一种可能的方法是向重定向添加参数,例如

if (!$_REQUEST['redirect'])
    header("Location: /ìndex.php?redirect=1");

这样重定向只能发生一次。

另一种方法是,如果用户已经在/上,则停止重定向。我建议将两者结合起来。