错误地重做了多次REDIRECTS

时间:2016-11-01 13:27:00

标签: php apache

我花了几个小时试图解决这个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在下面,我认为它可能有一些东西:

选项-indexes

<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上没有任何内容。

进行研究我发现这在WP上是一个非常普遍的问题 - 这不是这里的情况。有什么想法吗?

由于

1 个答案:

答案 0 :(得分:1)

因此,您重定向到/site/login.php,其重写更改为index.php?p2k_url=site/login.php

$url将是一个['site', 'login.php']的数组(i&#39; d trim($x, '/')字符串,然后才会爆炸。

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

如果您想允许/site/login/login,那么您只需要为此制定规则。如果/site/xxx始终等于/xxx,那么只需从{url}移除第一个数组索引$url[0] == 'site'(或正确规范您的网址)

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