首页 > php > phpcms > > 正文

phpcms v9站http升级到https加http2遇到到坑

点击:

本站现在迁移到腾讯云,升级http2和加httpsnginx配置方面到坑,已经写了一篇:网站迁移云服务器血泪记—phpcms小站迁移然后发现后台,很多地

本站现在迁移到腾讯云,升级http2和加https

nginx配置方面到坑,已经写了一篇:网站迁移云服务器血泪记—phpcms小站迁移 

然后发现后台,很多地方出现错误。

然后百度搜索下,phpcms  http https ,整理下,修改如下

phpcmsv9 全站https后台列表分页链接错误解决办法

\phpcms\libs\functions\global.func.php

找到:

$url = str_replace(array('http://','//','~'), array('~','/','http://'), $url);


替换为:


$url = str_replace(array('http://','//','~'), array('~','/','http://'), $url);

$url = str_replace(array('http://','//','~'), array('~','/','http://'), $url);

(这个主要影响phpcms 管理台 比如文章列表 分页 ,分页导航错误

phpcmsv9 全站https后台编辑站点域名无法提交

phpcmsv9 全站https后台编辑站点域名无法提交,在后台修改站点域名为https提交后提示“站点域名格式应该为http://www.phpcms.cn/,请以‘/’结束”,解决办法:

找开 phpcms\modules\admin 下的 site.php文件,在大约128行修改如下:

if (!empty($domain) && !preg_match('/http:\/\/(.+)\/$/i', $domain)) {

替换为:

if (!empty($domain) && !preg_match('/https:\/\/(.+)\/$/i', $domain)) {

找到

\phpcms\modules\content\templates\content_list.tpl.php

\phpcms\modules\content\templates\content_page.tpl.php


elseif(strpos($r['url'],'http://')!==false && strpos($r['url'],'https://')!==false) {

替换为:


找到

/www/zhoulujun/zhoulujun/phpcms/libs/classes/attachment.class.php

然后尼玛,直接 打包下载,把全局查找http:\/\/的地方,然后批量修改 ,全部改成

http[s]?:\\

例如:

$okurl = preg_replace('/^(http[s]?:\/\/)/i','',$okurl);


phpcms v9改成https后,通讯成功,但是无法登陆和注册

phpcms/modules/member/classes/client.class.php 

中361行增加

$port = !empty($matches['port']) ? $matches['port'] : ( strtolower($matches['scheme'])=='https' ? 443 : 80 );

中386行替换为:

$contextOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false
    )
);

//如果有签名的证书
//$contextOptions = array(
//    'ssl' => array(
//        'verify_peer' => true, 
//        'cafile' => '/path/to/cacert.pem',
//        //'CN_match' => 'indexroot.net', // 匹配域名
//        'ciphers' => 'HIGH:!SSLv2:!SSLv3',
//        'disable_compression' => true,
//    )
//);

$context = stream_context_create($contextOptions);
$fp = stream_socket_client("ssl://{$host}:{$port}", $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, $context);

这个最初看到,想到我是https啊,时有证书到啊。但是证书只有crt版本,立马把crt转换为PEM,然后,配置,发现不行!再改ciphers和nginx配置一样,不行,再改域名配置,还是不行……

TMD……然后拍脑袋,直接干掉证书方面到配置,可行!


phpcms目录路径修改,数据库文章url也修改了,但是文章路径就是不对!如何处理?

之前我的站点是这样的,www.zhoulujun.cn/zhoulujun/文章目录  

改版后是这样的:www.zhoulujun.cn/文章目录  

因为在我的主域名下还有其它项目,zhoulujun这个目录存放平时文章,但是现在觉得有必要包文章目录移出来,起码对seo好点点(自我感觉),第二个URL也清爽点——之前没有想到会积累这么多文章内容。

把mysql数据导出,替换全部路径后,在导入mysql,清空和更新msyql缓存,更新phpcms缓存 ,栏目缓存,批量更新url地址,批量更新内容,更新缓存。重复n遍,发现,首页连接还是没有变

最后发现,phpcms\modules\content\create_html.php ,恢复原样后,更新成功。改的吐血啊。

//  private function urls($id, $catid= 0, $inputtime = 0, $prefix = ''){
//    $urls = $this->url->show($id, 0, $catid, $inputtime, $prefix,'','edit');
//    //更新到数据库
////      $url = $urls[0];
//    $url ="zhoulujun" .$urls[1];
//    $this->db->update(array('url'=>$url),array('id'=>$id));
//    //echo $id; echo "|";
//    return $urls;
// }

phpcms用微博帐号登录出错了 错误码:21322 重定向地址不匹配

/www/zhoulujun/zhoulujun/phpcms/modules/member/index.php

找到

define('WEB_CALLBACK', APP_PATH.'index.php?m=member&c=index&a=public_sina_login&callback=1');

修改

define('WEB_CALLBACK', 'https://www.zhoulujun.cn/index.php?m=member&c=index&a=public_sina_login&callback=1');


网上查询,结果都是

登录http://open.weibo.com ,选择[管理中心]->[我的应用]->[“您的应用名”]->展开左侧[应用信息]->[高级信息]->OAuth2.0 授权设置 右上角[编辑]->在框里填入回调地址即可.

实际新浪开放平台根本没有回调地址设置这个选项————还以为自己眼花找不到!

同样到,phpcms http升级https后,腾讯qq登录不对,应该去应用中心,更改回调地址。裁可以正常登录


The plain HTTP request was sent to HTTPS port

这个时nginx sll 设置为了on,

而且这个不能单独对某个域名进行设置,只要一个server_name设置了ssl on;都会报The plain HTTP request was sent to HTTPS port 这个错误。

我就设置了ssl off;让CDN强制http转https


iconfont彩色字体支持

iconfont用了好多年,手机端也用彩色svg,但是,考虑到网站是自适应,从fontclass转svg,然后又从svg转fontclass ,折腾。


百度站内搜索站内推荐不支持https

百度站内搜索,改from表单形式,浏览器还是提示mixed****,然后自己提交到二级域名so.zhoulujun.cn,再301跳转到search.zhoulujun.cn,感觉坑爹,还是,沿用自己的搜索引擎算了。看了下百度搜索API,准备自己开发,然后,文档,毛线……

站内搜索爷爷一样,nginx转发,然后发现,然后后台php索取百度的页面,(ajax到后台,后台拉取站内搜索推荐内容),百度,就是个坑货。自己说提倡https,然后,周边产品都不支持下,无语……

只有创始人才能执行该操作

网站替换CDN路径,整个数据库40M,所以用phpcms自带的数据库管理工具备份。修改sql文件上传后,提示:只有创始人才能执行该操作!首先,chown -R nginx nginx bakup 修改sql文件为用户归属nginx ,发现没有卵用,chmod -R 777 bakup 还是无效。

然后,心理拔凉拔凉的。原来发现,admin_founders,只要创建的用户才可以操作。而我之前的管理员账户为邮箱。所以,启用最先创建的管理员账户,

update v9_admin  set username = xxx where userid=1;

或者,打开文件/caches/configs/system.php,将新添加的帐号的序号写入admin_founders变量的值里,这个变量保存的是网站创始人ID,多个ID逗号分隔。

可以查看《phpcms创建一个隐藏的超级管理员账户

phpcms 标签在后台管理无效

除了在phpcms/templates/里面的模板里面使用phpcms模板标签(smart语法),其他模板里面无效,比如phpcms/modules/admin/templates。

所以只能用php,但是,比如统计文章总访问量(不想在前台提现),但是phpcms里面的db调用真是个坑货。限于篇幅,看官还是自行google