• home > php > phpcms >

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

    Author:zhoulujun Date:

    本站现在迁移到腾讯云,升级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



    转载本站文章《phpcms v9站http升级到https加http2遇到到坑》,
    请注明出处:https://www.zhoulujun.cn/html/php/phpcms/2018_0608_8120.html