环境 debian5 +
nginx 1.1.18 + php5.4 + php-fpm
http方式请求
Ecshop版本:2.7.3
UTF8
出现的问题:
安装完成后,前台显示正常,后台输入正确的用户名密码点击登录后当前页面自动刷新,并未登入后台管理系统。
解决方案:
经追踪发现
1、文件
admin/includes/init.php第329行左右
$_SERVER['HTTP_REFERER'] 以
‘http’开头, 而$admin_path 则以 ‘https’开头。
if
(!empty($_SERVER['HTTP_REFERER'])
&&strpos(preg_replace(‘/:d+/’, ”,
$_SERVER['HTTP_REFERER']),$admin_path) === false)永真,
导致登录成功后,页面仍然跳转到后台登录页也就是private.php?act=login。
而程序调用次序:$admin_path
->$ecs->url()->new cls_ecshop.php种的ECS->url()->get_domain()->http()。
所以
vim
includes/cls_ecshop.php 153行左右
修改return
(isset($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS'])
!= ‘off’)) ? ‘https://’ : ‘http://’;
为 return
(isset($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS'])
== ‘on’)) ? ‘https://’ :
‘http://’;
即可
为什么呢?
在nginx默认配置下$_SERVER['HTTPS']
= ”
所以return
(isset($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS'])
!= ‘off’)) ? ‘https://’ : ‘http://’;为真,返回值‘https’。
从而导致在admin/includes/init.php第329行左右
if
(!empty($_SERVER['HTTP_REFERER'])
&&strpos(preg_replace(‘/:d+/’, ”,
$_SERVER['HTTP_REFERER']), $admin_path) ===
false)永真,执行ecs_header(“Location:
privilege.php?act=loginn”);
导致这种情况的原因很多,网上有很多,但是都不能解决我的问题,so,大家试试看,欢迎拍砖。