我花了几个小时试图解决这个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_dump
或print_r
以及die()
或exit
。使用die('xxx')
之类的东西,并将其上下移动到脚本中以确定重定向发生的位置,然后打印出变量以查看它们包含的内容并检查是否正确比较它们。这是一个粗糙的方法,但它有效