我花了几个小时试图解决这个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上是一个非常普遍的问题 - 这不是这里的情况。有什么想法吗?
由于
答案 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_dump
或print_r
以及die()
或exit
。使用类似die('xxx')
的内容并在脚本中上下移动以确定重定向发生的位置,然后打印出变量以查看它们包含的内容并检查您是否正确比较它们。这是一种粗糙的方法,但它有效。