无限星辰工作室-客户无限互联网动力之源

标题: Discuz!X3.2 Https修改方案之一 [打印本页]

作者: crx349    时间: 2016-2-22 01:58
标题: Discuz!X3.2 Https修改方案之一
修改前提环境支持SSL和Https,端口433访问,具体方法可以问度娘.

一、程序修改(适用Nginx)
Discuz采用 $_SERVER[‘HTTPS’] 的方式来判断SSL,架构问题nginx+php-fpm,无法采用这种方式识别,所以需要对Discuz程序进行一些调整(使用 $_SERVER[‘SERVER_PORT’] 来判断)。

source/class/discuz/discuz_application.php(约第187行处):

查找:

  1. $_G['isHTTPS'] = ($_SERVER['HTTPS'] && strtolower($_SERVER['HTTPS']) != 'off') ? true : false;
复制代码

修改为:

  1. //$_G['isHTTPS'] = ($_SERVER['SERVER_PORT'] == 443 || $_SERVER['HTTPS'] && strtolower($_SERVER['HTTPS']) != 'off') ? true : false;
  2. $_G['isHTTPS'] = $this->_is_https();
复制代码

文件最下面添加:
  1. }

  2. ?>
复制代码
前添加
  1. private function _is_https() {
  2.                 if(isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) != 'off') {
  3.                         return true;
  4.                 }
  5.                 if(isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https') {
  6.                         return true;
  7.                 }
  8.                 if(isset($_SERVER['HTTP_X_CLIENT_SCHEME']) && strtolower($_SERVER['HTTP_X_CLIENT_SCHEME']) == 'https') {
  9.                         return true;
  10.                 }
  11.                 if(isset($_SERVER['HTTP_FROM_HTTPS']) && strtolower($_SERVER['HTTP_FROM_HTTPS']) != 'off') {
  12.                         return true;
  13.                 }
  14.                 if(isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) {
  15.                         return true;
  16.                 }
  17.                 return false;
  18.         }
复制代码

uc_server/avatar.php (约第13行处):

查找:

  1. define('UC_API', strtolower(($_SERVER['HTTPS'] == 'on' ? 'https' : 'http').'://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/'))));
复制代码
修改为:

  1. define('UC_API', strtolower(($_SERVER['SERVER_PORT'] == 443 || $_SERVER['HTTPS'] == 'on' ? 'https' : 'http').'://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/'))));
复制代码
修改过后,更新缓存,发现大多数链接都变成了https。

2.2、后台设置

在后台还有一些设置,可能会干扰https的使用

后台 > 站长 > UCenter设置 > UCenter 访问地址,修改为https开头的

UCenter后台 > 应用管理 > 应用的主URL,修改为https开头

另外在 后台 > 全局 > 域名设置 中的一些设置也可能使https失效,如果进行了之前的几步还是无法启用,可以暂时删除这里的设置试试。

3、清理缓存

设置完成之后,需要清理缓存,使设置生效。


二、JS和CSS本地化
1.https访问时出现http调用外部链接的均提示有不安全脚本。此时我们应当找到调用了哪些外部的http链接的JS或CSS
2.利用浏览器开发者工具F12查看找到了如下外部调用的文件

  1. http://pc1.gtimg.com/js/jquery-1.4.4.min.js

  2. http://s.pc.qq.com/discuz/css/style.css

  3. http://discuz.gtimg.cn/cloud/scripts/discuz_tips.js?v=1

  4. https://openapi.guanjia.qq.com/fcgi-bin/getdzjs?cmd=urlquery_gbk_zh_cn   无效链接
复制代码



3.电脑管家网址保镖插件,修改
\source\plugin\pcmgr_url_safeguard\pcmgr_url_safeguard.class.php下的:

  1. // $jsscript .= '<link rel="stylesheet" type="text/css" href="http://s.pc.qq.com/discuz/css/style.css" />';
复制代码


为你的:

  1. // $jsscript .= '<link rel="stylesheet" type="text/css" href="https://你的论坛地址/discuz/css/style.css" />';
复制代码


(注意:修改后的地址你要保证你下载该外部CSS到你的网站目录,同时把style.css文件里调用的外部图片更换成本地图片路径)。

4.漫游应用,注释掉即可
找到/source/function/function_core.php


  1. $tipsService = Cloud::loadClass('Service_DiscuzTips');
  2.         $tipsService->show();
复制代码


把它注释掉,如下:

  1. /**
  2. *                $tipsService = Cloud::loadClass('Service_DiscuzTips');
  3. *                $tipsService->show();
  4. */
复制代码



5.JS容错。为了正常使用https我们得写个JS容错命令。在后台-全局-Seo设置-其他 加入以下代码:

  1. <script type="text/javascript">
  2. function SlyarErrors() {
  3. return true;
  4. }
  5. window.onerror = SlyarErrors;
  6. </script>
复制代码


6.其他







欢迎光临 无限星辰工作室-客户无限互联网动力之源 (https://www.xmspace.net/) Powered by Discuz! X3.4