迁移CakePHP 1.3.0至Plesk后出现302重定向循环问题求助
解决CakePHP 1.3迁移至Plesk后的302重定向问题
一、排查核心重定向触发点
因为没有全局的AppController::beforeFilter(),重点查以下几个地方:
- 检查
config/routes.php:有没有强制跳转的路由规则(比如跳转到带www/HTTPS的地址),Plesk的站点配置可能和原CPanel冲突,比如原站用HTTP,Plesk默认开了HTTPS但证书没配置好,导致循环跳转。 - 检查单个控制器的
beforeFilter:虽然没有全局的,但部分控制器可能自己写了这个方法,里面如果有未登录跳转逻辑,Session异常会导致“未登录→跳登录页→再判断未登录→再跳转”的死循环。 - 调低Security级别:修改
core.php里的Security.level,从high临时改成medium或low测试:Configure::write('Security.level', 'medium');
CakePHP1.3的高安全级别会校验请求头、referer,Plesk的环境可能不符合触发重定向。
二、切换Session存储方式
既然PHP Session路径没问题但仍有问题,试试换用Cake管理的Session或数据库Session:
1. 切换至Cake文件Session
修改core.php的Session配置:
Configure::write('Session.save', 'cake'); Configure::write('Session.savePath', TMP . 'sessions');
确保tmp/sessions目录存在,权限设为775,且所有者是Plesk的web服务器用户(比如apache/nginx)。
2. 切换至数据库Session
先创建Session表:
CREATE TABLE `cake_sessions` ( `id` varchar(255) NOT NULL default '', `data` text, `expires` int(11) default NULL, PRIMARY KEY (`id`) );
再修改core.php配置:
Configure::write('Session.save', 'database'); Configure::write('Session.table', 'cake_sessions');
修改后清空原PHP Session文件,测试重定向是否消失。
三、排查Plesk站点配置冲突
- 检查HTTPS设置:如果Plesk开了“永久重定向到HTTPS”,但原代码强制HTTP,或者代码强制HTTPS但Plesk的HTTPS证书未生效,都会导致循环跳转,先临时关闭HTTPS重定向测试。
- 确认文档根目录:Plesk里站点的文档根必须指向CakePHP的
app/webroot目录,要是指向了app目录,路由规则会失效触发重定向。 - 检查PHP配置:确保PHP版本是5.6,且
session.auto_start设为Off,CakePHP需要自己管理Session启动。
四、修复users/index页面的错误(辅助排查)
这些错误虽不直接导致重定向,但会影响站点正常运行,先处理:
- 静态方法调用警告:要么关闭PHP的
E_STRICT错误级别,要么把非静态方法的静态调用改成实例调用。 - 未定义索引:访问数组前先判断是否存在,比如用
isset($this->data['User']['username'])再取值。 - 控制器方法缺失:确认
UsersController里有index方法,或者检查路由是否把index指向了不存在的方法。
内容的提问来源于stack exchange,提问作者Cuenta0Gow
相关产品推荐
相关产品推荐

