错误太多的重定向已调试


Error TOO MANY REDIRECTS debbuged

我花了几个小时试图解决这个ERR_TOO_MANY_REDIRECTS,但没有成功。

它发生时,我访问我的网站URL没有登录。如果我没有启动会话,我将被重定向到-> mywebsite.com/site/login或/login

生成的PHP代码如下:

if ( isset($_GET['p2k_url']) && $_GET['p2k_url'] ) {
        if ( strstr($_GET['p2k_url'], '/') ) {
            $url = explode('/', $_GET['p2k_url']);
        } else {
            $url[0] = $_GET['p2k_url'];
        }
        if ( !isset($url[1]) || !$url[1] ) {
            $url[1] = 'index';
        }
    }
    if ( $url[0] != 'login' && !$__usuCod ) {
        header('Location: /site/login.php');
        die();
    }
    if ( file_exists(SITE_DIR.DS.'_'.$url[0].DS.$url[1].'.php') ) {
        include SITE_DIR.DS.'_'.$url[0].DS.$url[1].'.php';
    } else {
        if ( file_exists(SITE_DIR.DS.'_'.$url[0].DS.'no404.php') ) {
            include SITE_DIR.DS.'_'.$url[0].DS.'index.php';
        } else {
            include SITE_DIR.DS.'_404'.DS.'index.php';
        }
    }

在这里:if ( $url[0] != 'login' && !$__usuCod ) {

我的login.php只是一个简单的html页面的形式。没什么好担心的。

虽然我的主。htaccess在下面,我认为它可能有一些东西:

选择索引

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^(.*)$ index.php?p2k_url=$1 [QSA,L]
</IfModule>

为了调试和发现错误,当我运行tail -f access_log时,我只得到简单的访问请求:

127.0.0.1 - - [01/Nov/2016:11:16:28 -0200] "GET /site/login.php HTTP/1.1" 302 -

error_log tough.

在做研究时,我发现这是一个非常普遍的问题,但在这里不是这样。什么好主意吗?

谢谢

所以你重定向到/site/login.php,你重写更改为index.php?p2k_url=site/login.php

$url将是['site', 'login.php']的数组(我将trim($x, '/')字符串在爆炸之前确定)。

然后测试$url[0] != 'login' ([0]总是为真)是否为site。您需要先测试$url[1] != 'login.php'或从字符串中修剪文件扩展名。

如果你想允许/site/login/login,那么你只需要为此制定一个规则。如果/site/xxx总是等于/xxx,那么只要从$url中删除第一个数组索引,如果$url[0] == 'site'(或正确规范化你的url)

我早期使用的一个非常有用的调试技术是var_dumpprint_r以及die()exit。使用die('xxx')之类的东西,并将其上下移动到脚本中以确定重定向发生的位置,然后打印出变量以查看它们包含的内容并检查是否正确比较它们。这是一个粗糙的方法,但它有效