搜索
查看: 2154|回复: 0

[技术杂烩] Discuz X3.* 全站开启 SSL / HTTPS 显示绿锁全攻略

[复制链接]

8183

主题

8226

帖子

8910

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
8910
发表于 2019-3-18 09:57:44 | 显示全部楼层 |阅读模式
一、全站资源 https 化。
1、UCenter地址、本地附件 URL 地址、风格图片地址需全部开启https访问,否则浏览器会出现类似“网站内存在不安全的资源”的警告。如果这部分链接全部是相对链接,则请忽略本项。
若“风格管理”中将“界面基础图片目录 {IMGDIR}”和“扩展图片目录 {STYLEIMGDIR}” 地址设置为 https 开头的绝对链接,需要修复一处BUG,否则会导致这部分风格图片无法显示。
打开 source/function/cache/cache_styles.php ,查找以下三项:
  1. $cssdata = !preg_match('/^http:\/\//i', $data['styleimgdir'])
  2. $cssdata = !preg_match('/^http:\/\//i', $data['imgdir'])
  3. $cssdata = !preg_match('/^http:\/\//i', $data['staticurl'])
复制代码
将其中的 /^http:\/\//i 替换为 /^http/i ,保存覆盖。
注意:修改后,若将来要使用相对链接,需要确保目录不以 http 开头。
2、修正楼层点评中的头像链接。点评头像链接会直接缓存于 pre_forum_postcache 表中,我们可以在输出时对 http:// 进行替换。
打开模板 viewthread_node_body.htm ,查找 $comment[avatar] 替换为:
  1. {eval echo str_replace("http://","https://",$comment[avatar]);}
复制代码
3、解决 DiscuzTips 造成的不安全资源提示。
打开 source/plugin/manyou/Service/DiscuzTips.php ,在 echo $jsCode; 前加 // 将其注释掉。
4、百度结构化插件暂不支持 https ,将造成浏览器提示存在不安全资源。暂停使用该插件。
5、清理用户签名位中的 http:// 图片,清理帖子中存在的外链图片。
6、使用浏览器的开发者工具逐一排查是否存在其他 http:// 资源(包括图片、JS、CSS的,A链接无影响)。

二、解决QQ互联登录问题。
截至2015年12月,Discuz的QQ互联仍不支持 https 站点,我们可以进行以下操作,将QQ互联链接调整为 http:// ,QQ互联登录跳转回 http:// 后再在站点内部301到 https:// 页面。
1、考虑到防止屏蔽等因素,建议启用一个独立域名,并在论坛所在服务器新建一个该域名的站点,站点目录中使用软链接链接论坛的以下目录:api config data source static 和以下文件:admin.php api.php connect.php ,即相当于对论坛做一个镜像但仅限于QQ互联相关文件。
2、打开 source/plugin/qqconnect/connect.class.php 文件,将 40-46 行中的:
  1. $_G['siteurl'].'
复制代码
替换为:
  1. 'http://上面创建的专用网址/
复制代码
3、打开 connect.php 文件,在 $discuz->init(); 后面加入:
  1. if($_SERVER['HTTP_HOST'] != preg_replace("/http(s)?:\/\/(.*?)(\/*)$/", "\\2", $_G['setting'][siteurl])) {
  2.         header('HTTP/1.1 301 Moved Permanently');
  3.         header('Location: '.preg_replace("/(.*?)(\/*)$/", "\\1", $_G['setting'][siteurl]).$_SERVER['REQUEST_URI']);
  4.         exit;
  5. }
复制代码
注意:后台设置中网站URL地址一定要是你的HTTPS主网址。

三、解决后台应用中心无法访问的问题
在第2步基础上,访问第2步中专用域名下的 admin.php 登录后台即可正常进入应用中心。

四、禁止在第2步专用域名下更新缓存(否则前台部分图标地址会使用该域名)。
打开 source/admincp/admincp_tools.php 文件,查找:
  1. showtips('tools_updatecache_tips');

  2.         if($step == 1) {
  3.                 cpmsg("<input type="checkbox" name="type[]" value="data" id="datacache" class="checkbox" checked /><label for="datacache">".$lang[tools_updatecache_data]."</label><input type="checkbox" name="type[]" value="tpl" id="tplcache" class="checkbox" checked /><label for="tplcache">".$lang[tools_updatecache_tpl]."</label><input type="checkbox" name="type[]" value="blockclass" id="blockclasscache" class="checkbox" /><label for="blockclasscache">".$lang[tools_updatecache_blockclass].'</label>', 'action=tools&operation=updatecache&step=2', 'form', '', FALSE);
复制代码
替换为:
  1. showtips('tools_updatecache_tips');
  2.         echo '<br>';

  3.         if($step == 1) {
  4.                 if($_G['siteurl'] == $_G['setting'][siteurl]) {
  5.                         cpmsg("<input type="checkbox" name="type[]" value="data" id="datacache" class="checkbox" checked /><label for="datacache">".$lang[tools_updatecache_data]."</label><input type="checkbox" name="type[]" value="tpl" id="tplcache" class="checkbox" checked /><label for="tplcache">".$lang[tools_updatecache_tpl]."</label><input type="checkbox" name="type[]" value="blockclass" id="blockclasscache" class="checkbox" /><label for="blockclasscache">".$lang[tools_updatecache_blockclass].'</label>', 'action=tools&operation=updatecache&step=2', 'form', '', FALSE);
  6.                 } else {
  7.                         cpmsg('请切换到主域名下更新缓存', '', 'succeed', '', FALSE);
  8.                 }
复制代码

五、http:// 跳转至 https://
打开 source/class/class_core.php 文件,在
  1. set_exception_handler(array('core', 'handleException'));
复制代码
后面加入:
  1. if($_SERVER['SERVER_PORT'] != '443' && $_SERVER['PHP_SELF'] != '/api/uc.php') {
  2.         if(!preg_match("/(Zidingyi|Bot|Crawl|Spider|slurp|sohu-search|lycos|robozilla)/i", $_SERVER['HTTP_USER_AGENT'])) {
  3.                 header('HTTP/1.1 301 Moved Permanently');
  4.                 header('Location: https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
  5.                 exit;
  6.         } elseif(preg_match("/(Baidu|Google)/i", $_SERVER['HTTP_USER_AGENT'])) {
  7.                 header('HTTP/1.1 403 Forbidden');
  8.                 exit;
  9.         }
  10. }
复制代码
说明:当访问端口不为443(即https)时,如果不是搜索引擎则跳转到https页面,否则如果是百度或Google蜘蛛(这两个搜索引擎已支持收录https)则返回403禁止访问,避免重复收录 http 和 https 或优先收录了 http ,其它搜索引擎未定义,正常返回 http 页面(其它搜索引擎可能不支持收录 https ,因此开放 http 给他们)。
以上代码中“Zidingyi”可以任意修改,管理员使用以下UA可以不跳转到https,便于对http版进行调测:
Mozilla/5.0 (compatible; Zidingyi/2015; +http://www.xxx.com)

GM起点所有资源均免费下载,回复帖子即出现下载地址!站长QQ:969806969
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站长QQ969806969|润芒论坛|GM部落|GM016论坛|jjj555论坛|鲁ICP备16008334号-17|GM起点

GMT+8, 2024-12-4 15:50 , Processed in 1.234375 second(s), 19 queries .

Powered by Discuz! X3.4

© 2008-2020 www.gmqd.com

快速回复 返回顶部 返回列表