|
一、全站资源 https 化。
1、UCenter地址、本地附件 URL 地址、风格图片地址需全部开启https访问,否则浏览器会出现类似“网站内存在不安全的资源”的警告。如果这部分链接全部是相对链接,则请忽略本项。
若“风格管理”中将“界面基础图片目录 {IMGDIR}”和“扩展图片目录 {STYLEIMGDIR}” 地址设置为 https 开头的绝对链接,需要修复一处BUG,否则会导致这部分风格图片无法显示。
打开 source/function/cache/cache_styles.php ,查找以下三项:
- $cssdata = !preg_match('/^http:\/\//i', $data['styleimgdir'])
- $cssdata = !preg_match('/^http:\/\//i', $data['imgdir'])
- $cssdata = !preg_match('/^http:\/\//i', $data['staticurl'])
复制代码 将其中的 /^http:\/\//i 替换为 /^http/i ,保存覆盖。
注意:修改后,若将来要使用相对链接,需要确保目录不以 http 开头。
2、修正楼层点评中的头像链接。点评头像链接会直接缓存于 pre_forum_postcache 表中,我们可以在输出时对 http:// 进行替换。
打开模板 viewthread_node_body.htm ,查找 $comment[avatar] 替换为:
- {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 行中的:
替换为:
3、打开 connect.php 文件,在 $discuz->init(); 后面加入:
- if($_SERVER['HTTP_HOST'] != preg_replace("/http(s)?:\/\/(.*?)(\/*)$/", "\\2", $_G['setting'][siteurl])) {
- header('HTTP/1.1 301 Moved Permanently');
- header('Location: '.preg_replace("/(.*?)(\/*)$/", "\\1", $_G['setting'][siteurl]).$_SERVER['REQUEST_URI']);
- exit;
- }
复制代码 注意:后台设置中网站URL地址一定要是你的HTTPS主网址。
三、解决后台应用中心无法访问的问题
在第2步基础上,访问第2步中专用域名下的 admin.php 登录后台即可正常进入应用中心。
四、禁止在第2步专用域名下更新缓存(否则前台部分图标地址会使用该域名)。
打开 source/admincp/admincp_tools.php 文件,查找:
- showtips('tools_updatecache_tips');
- if($step == 1) {
- 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);
复制代码 替换为:
- showtips('tools_updatecache_tips');
- echo '<br>';
- if($step == 1) {
- if($_G['siteurl'] == $_G['setting'][siteurl]) {
- 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);
- } else {
- cpmsg('请切换到主域名下更新缓存', '', 'succeed', '', FALSE);
- }
复制代码
五、http:// 跳转至 https://
打开 source/class/class_core.php 文件,在
- set_exception_handler(array('core', 'handleException'));
复制代码 后面加入:
- if($_SERVER['SERVER_PORT'] != '443' && $_SERVER['PHP_SELF'] != '/api/uc.php') {
- if(!preg_match("/(Zidingyi|Bot|Crawl|Spider|slurp|sohu-search|lycos|robozilla)/i", $_SERVER['HTTP_USER_AGENT'])) {
- header('HTTP/1.1 301 Moved Permanently');
- header('Location: https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
- exit;
- } elseif(preg_match("/(Baidu|Google)/i", $_SERVER['HTTP_USER_AGENT'])) {
- header('HTTP/1.1 403 Forbidden');
- exit;
- }
- }
复制代码 说明:当访问端口不为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)
|
|