1. 程式人生 > >SSL證書&配置 Discuz! 優化

SSL證書&配置 Discuz! 優化

DZ這貨別看它在論壇、門戶領域作威作福的,其實它很是保守,1. 對高版本 PHP 相容不佳 2. 對 HTTPS 相容不佳。 真是拖垮了時代的步伐啊,這裡來研究一下 DZ 開啟 HTTPS。

1、SSL證書&配置

首先,要開啟SSL,總得有一個證書吧?無論是正規CA頒發的,還是自己籤的,沒有肯定是不行的。如果沒有的話,先去申請個吧。(具體方法請谷歌,這裡不再贅述)

2、Discuz! 優化

2.1、程式調整

自 Discuz! X3 開始,已經加入了對https的支援,如果你使用https訪問論壇,論壇中的連結都會變成https。如果你發現大部分連結都已經使用了https,就代表Discuz已經自動識別了,此時,可以跳過本步,直接進入下一步。

Discuz採用 SERVER[HTTPS]SSLVPSnginx+phpfpmDiscuz調使_SERVER[‘SERVER_PORT’] 來判斷)。

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

修改過後,更新快取,發現大多數連結都變成了https。

2.2、後臺設定

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

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

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

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

3、清理快取

設定完成之後,需要清理快取,使設定生效。

清理快取及記憶體快取,如果設定了帖子快取,還需清理資料庫內的快取(清空相應cache資料庫,或者靜等快取失效)

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