重定向循环

时间:2015-06-17 20:31:23

标签: php html

问题

我真的不明白我为什么要获得重定向循环。但我可以确定它发生在哪里,但我无法解释原因。这是self::redirect("?" . self::$queryString)行给我带来问题。如果我删除它我可以导航很好但是当我把它放回去它再次给我错误。 (不知道这是否有问题,但我认为是因为当我删除该行时,它不再进行重定向循环。)

if (self::curPage() == "/clan.php" && isset($_GET['clan'])) {
  self::$queryString = $_SERVER['QUERY_STRING'];
} elseif (self::curPage() == "/clan/profile.php") {
  self::redirect("?" . self::$queryString);
}

我想要什么

我想要的基本上是添加以前的$queryString(GET变量)。每当用户从 /clan.php 页面导航时,它们将被转移到新的URL,然后在URL的末尾连接先前的$queryString

如果您有办法通过改进,新方法或任何其他方式解决这个问题,我将非常感激。可以在评论中提出进一步的问题,我会尽可能快地和最好地回答这些问题。

我的想法

  • 更改 a (link tag)并将href值更改为当前/上一个GET变量/参数。除非也许这样,否则不要知道怎么做。这是我到目前为止唯一想到的部分。

    var currentGET = <?php echo $_SERVER['QUERY_STRING']; ?>;
    if (window.location.href == '/clan.php') {
       $('a').attr('href', window.location.href + "?" + currentGET);
    }
    

EXTRA

  

这是curPage()函数!

public static function curPage(){
    $parts = parse_url(self::curPageURL());
    return $parts["path"];
}

1 个答案:

答案 0 :(得分:1)

以下两行肯定会导致重定向循环:

} elseif (self::curPage() == "/clan/profile.php") {
    self::redirect("?" . self::$queryString);

这样做的原因是因为您正在检查当前URI是否为/clan/profile.php,是否使用查询字符串将其重定向到自身,然后再次运行检查,即使查询字符串存在

这需要像这样来防止无限重定向:

} elseif (self::curPage() == "/clan/profile.php" && false == **QUERY STRING CONDITION**) {
    self::redirect("?" . self::$queryString);

**QUERY STRING CONDITION**需要替换为查询字符串的某种检查,表明URI是正确的,并且您不想重定向它们。