Discuz x3 開啟cdn和https后鏈接修改教程
開啟支持https主要需要修改一下幾個地方
1.?、查找修改文件discuz_application.PHP?:source/class/discuz/discuz_application.php (約第 187 行處): 查找:$_G['isHTTPS']?=?($_SERVER['HTTPS']?&&?strtolower($_SERVER['HTTPS'])?!=?'off')???true?:?false;
修改為:$_G['isHTTPS']?=?($_SERVER['SERVER_PORT']?==?443?||?$_SERVER['HTTPS']?&&?strtolower($_SERVER['HTTPS'])?!=?'off')???true?:?false;
2、查找修改文件avatar.php?:uc_server/avatar.php (約第 13 行處)查找:define('UC_API',?strtolower(($_SERVER['HTTPS']?==?'on'???'https'?:?'http').'://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'],?0,?strrpos($_SERVER['PHP_SELF'],?'/'))));
修改為: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'],?'/'))));
3、除去非?HTTPS?內容避免提示”不安全內容“Source/plugin/manyou/Service/DiscuzTips.php ,最后的那段 JS 加載腳本刪除就行。非樓主層如果有點評,那么點評者頭像不是 HTTPS 開頭,也需要修改一個文件來適配: template/default/forum/viewthread_node_body.htm (約 180 行),搜索 div class="psta vm">,將下面一行注釋掉或者刪除。打開瀏覽器,使用開發者工具或者查看源碼逐一排查加載的非 HTTPS 資源并修改。
4、后臺設置的修改完善在后臺還有一些設置,可能會干擾 https 的使用。
后臺 >全局 > 站點 URL ,改為 https 開頭的
后臺 > 站長 > UCenter 設置 > UCenter 訪問地址,修改為 https 開頭的
UCenter 后臺 > 應用管理 > 應用的主 URL ,修改為 https 開頭。修改后可能會顯示通訊失敗,如果 UC 和論壇程序安裝在同一機器,此失敗可無視,實測可以和 UC 正常通訊不影響(測試是否正常通訊程序的 Bug ),如果 UC 和論壇程序不在一臺機器上,有可能不能通訊。 另外在 后臺 > 全局 > 域名設置 中的一些設置也可能使 https 失效,如果更新緩存后論壇默認連接還是 HTTP ,請刪除 后臺 > 全局 > 域名設置 > 應用域名 > 默認 里面的默認域名(一般去 forum.php 尾巴這里會有內容,為了 HTTPS 請刪除)。
5、模板的調整主要在模板的 foot.HTML 以及 header.html 等文件中,使用工具逐一排查模板文件中寫死的 HTTP 鏈接,修改為 HTTPS 。
6、解決QQ互聯的問題 (自己可以先測試QQ互聯有沒有問題,我的discuz3.2的沒有問題,所以就跳過這一步驟)
首先升級QQ互聯插件,最低版本要求是 1.18.2,如果升級后依然不行,需要修改回調 URL 為非 HTTPS 的:
找到:
source/plugin/qqconnect/connect.class.php 大約41行
在common_base() 函數里面,將 $_G[‘siteurl’] 直接硬編碼為 你的http的URL ,首先修改callback_url,如果不行,將所有包含connect.php 的 URL 全部替換。
7、將論壇帖子中網站的URL改成https格式的。
會員在發帖的過程中,很可能調用了本站別處的帖子或連接,而這個鏈接肯定是http的,所以需要將這些鏈接全部修改成https格式的:
執行SQL語句,可以在DZ后臺,或者phpmyadmin中都可以:UPDATE?pre_forum_post?SET?message=REPLACE(message,’http://舊網址.com’,’https://新網址.com’);
復制代碼
8、修改模版各處http://為https://
這里為模版文件較多的用戶提供一個簡單的批量的https://模版替換教程(開啟偽靜態的可用)
打開source/function/function_core.php
搜索$content?=?output_replace($content);
在下面加入$content?=?str_replace('http://www.xxxx.com','https://www.xxxx.com',$content);
如果你有多個二級域名,可以加入
$content = preg_replace('http://(.*?)xxxx.com','https://\1xxxx.com',$content);
感謝蔥子博客以及一些博主提供的第二部分說明。真擔心審核不通過!
第三步discuz網站實現綠標以及去掉不安全腳本有一個很坑的就是我的全局—域名設置—應用域名,這里填寫了以前的域名,現在域名是https了,所有用這個就不行了,所以導致頁面一直有重定向的問題,解決方法應用域名留空。
網站現在可以訪問還是灰色的https,這其中就是有http的圖片、CSS、JS等問題,外鏈好像是沒有關系的,所以需要一一排查,我用火狐(版本)firebug排查發現很多問題。(要說明現在firebug停止更新了),所以要用firebug排查就需要火狐版本低一些,我的話很多啊!
具體的解決問題(1)、https訪問時出現http調用外部鏈接的均提示有不安全腳本。此時我們應當找到調用了哪些外部的http鏈接的JS或css
(2)、利用火狐firebug查看(如果有廣告或360、百度聯盟、谷歌聯盟等廣告的先關閉,還有包括百度分享也是不支持https的),我們找到如下四個外部調用的文件http://pc1.gtimg.com/js/jQuery-1.4.4.min.js
http://s.pc.qq.com/discuz/css/style.css
http://discuz.gtimg.cn/cloud/scripts/discuz_tips.js?v=1
https://openapi.guanjia.qq.com/fcgi-bin/getdzjs?cmd=urlquery_gbk_zh_cn? ?無效鏈接
(3)、接下來就一個一個的解決吧,第一個JS是因為DZ自帶的電腦管家網址保鏢插件造成的,進入后臺關閉該插件即可。第二個是個調用了外部CSS導致的!這個怎么辦呢?原理是把外部的CSS下載到本地來調用吧。下載CSS保存在自己的服務器網站目錄里,修改\source\plugin\pcmgr_url_safeguard\pcmgr_url_safeguard.class.php下的:// $jsscript .= '';
復制代碼
為你的:// $jsscript .= '';
(注意:修改后的地址你要保證你下載該外部CSS到你的網站目錄,同時把style.css文件里調用的外部圖片更換成本地圖片路徑)。至此,第二個問題解決。第三個是DZ漫游應用,這段代碼是強制輸出的,根本沒有加判斷。那么我們把它注釋掉即可找到/source/function/function_core.php$tipsService = Cloud::loadClass('Service_DiscuzTips');
$tipsService->show();
好了!第四個問題是一個無效鏈接。忽略不管(4)、JS容錯。程序員在開發時會或多或少對瀏覽器的兼容考慮不周,這時候為了正常使用https我們得寫個JS容錯命令。(如果ie報錯,并導致js無法順利執行完畢,就必須找出報錯的問題所在了,這才是最終的解決方法.)。在頭部加入以下代碼:
function SlyarErrors() {
return true;
}
window.onerror = SlyarErrors;
至此。全部解決。
至此你已經可以全站cdn加https訪問了,但是還是有一些帖子頁面編輯的時候復制了別的http的圖片,所以需要慢慢替換了,我也不知道有什么好方法替換圖片,反正是官網不是很大,很快替換好