DISCUZ新版本已全面支持HTTPS443端口,以下為老版本開啟HTTPS訪問解決方案:

前提:已經擁有域名證書,且服務器支持添加SSL證書(如VPS或云主機,以及部分虛擬主機)


雖然DiscuzX3.2、X3.3已經針對https做了優化,但仍有很多地方需要改動,經過在幾個生產環境的改造中發現,Discuz目前可以完美支持https并顯示綠色https圖標,不過有些麻煩,且每個環境都會出現自己的問題。


 


第一步:


全局 > 站點信息 > 網站 URL,修改為//bbs.02957.com的格式




第二步:修成Discuz適配https


如果你的Web服務是Apache,請忽略這一步,Nginx請繼續看:


Discuz判斷網站是否啟動SSL是采用 $_SERVER[‘HTTPS’] 的方式,此方法不支持Nginx(nginx+php-fpm),需要先做一些修改,讓Discuz使用 $_SERVER[‘SERVER_PORT’]來判斷網站是否啟用SSL。


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;

復制代碼

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'], '/'))));

復制代碼

 


第三步:Ucenter通信使用https方式


后臺 > 站長 > UCenter設置 > UCenter 訪問地址,修改為https開頭的


UCenter后臺 > 應用管理 > 應用的主URL,修改為https開頭。




第五步:解決瀏覽器提示“加載不安全的腳本”


 


這個提示是因為這個腳本使用http方式加載的原因:


復制代碼

此腳本的功能是檢查補丁和安全通知,用處不大,果斷刪除。


 


刪除方法:編輯模板的footer.htm,在最后找到并刪掉:


復制代碼

即可。




第六步:解決QQ互聯的問題


首先升級QQ互聯插件,最低版本要求是 1.18.2,如果升級后依然不行,需要修改回調 URL 為非 HTTPS 的:


找到:


source/plugin/qqconnect/connect.class.php 大約41行


在common_base() 函數里面,將 $_G[‘siteurl’] 直接硬編碼為 你的http的URL ,首先修改callback_url,如果不行,將所有包含connect.php 的 URL 全部替換。




第七步:將論壇帖子中網站的URL改成https格式的。


會員在發帖的過程中,很可能調用了本站別處的帖子或連接,而這個鏈接肯定是http的,所以需要將這些鏈接全部修改成https格式的:


 


執行SQL語句,可以在DZ后臺,或者phpmyadmin中都可以:


UPDATE pre_forum_post SET message=REPLACE(message,’//舊網址.com’,’//新網址.com’);

復制代碼

------------------------------------------------------


有會員反饋以上SQL升級語句報錯:


 


如果存在該問題則使用以下SQL語句即可:(注意符號標點~)


UPDATE pre_forum_post SET message=REPLACE(message,’//舊網址.com’,’//新網址.com’);

復制代碼

-------------------------------------------------------


最后,Nginx開啟強制https跳轉,在nginx虛擬主機配置文件中,在Server字段增加:


if ($server_port = 80) {

 

return 301 //$server_name$request_uri;

 

}

 

if ($scheme = http) {

 

return 301 //$server_name$request_uri;

 

}

復制代碼

注意:這里需要根據自己的服務器環境配置,不正確或者有問題的配置可能導致Ucenter通信失敗,Apache需要在.htaccess中添加規則。


 


Apache .htaccess規則:


等待添加

復制代碼

修改過后,更新緩存,發現大多數鏈接都變成了https.

2.2、后臺設置 


在后臺還有一些設置,可能會干擾https的使用 


后臺 > 站長 > UCenter設置 > UCenter 訪問地址,修改為https開頭的 


UCenter后臺 > 應用管理 > 應用的主URL,修改為https開頭 


另外在 后臺 > 全局 > 域名設置 中的一些設置也可能使https失效,如果進行了之前的幾步還是無法啟用,可以暫時刪除這里的設置試試。 



3、清理緩存 


設置完成之后,需要清理緩存,使設置生效。 


清理緩存及內存緩存,如果設置了帖子緩存,還需清理數據庫內的緩存(清空相應cache數據庫,或者靜等緩存失效) 


至此,Discuz https啟用成功,當然,在訪問某些頁面的時候,可能鎖會打上叉。因為頁面中加載了其他http內容。可能是統計代碼、QQ分享代碼、QQ秀頭像等,這部分服務暫時沒有提供https協議,因而無法啟用。只能等待Discuz進一步支持https。 



 


到此,你應該可以看到綠色的https標志了。