Discuz! X 3.4 論壇如何實現全站 https 訪問
摘要:在主機開啟 SSL 功能后,https 訪問倒是正常的,但瀏覽器上的綠色小鎖並沒有出現,而且網站導航上的鏈接還是 http 的。
網站開啟 https 加密訪問, 現在基本已經成為標配了。之前“中華馬氏網”是托管在阿里雲的虛擬主機上的,無法實現 SSL 加密訪問,這次遷移到老薛主機后,可以一鍵開啟 SSL 功能。
但在主機開啟 SSL 功能后,https 訪問倒是正常的,但瀏覽器上的綠色小鎖並沒有出現,而且網站導航上的鏈接還是 http 的,顯然網站的 https 訪問設置並不完全。
網站是用 Discuz! X 3.4 Release 20171001 搭建的,這個 php 網絡論壇程序近幾年已經很少更新,估計沒有添加上 https 訪問的功能設置。在官方論壇上看到了一則相關的修改文章,按步驟操作后,成功實現綠色小鎖,特介紹給大家。
一、需要修改3個源文件(修改前請記得做好文件備份):
1、 source/class/discuz/discuz_application.php (大概在第 190 行處)
查找: $_G[‘isHTTPS’] =
這一行直接修改為: $_G[‘isHTTPS’] = true;
2、 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、template/default/common/header.htm
查找: http:// 全部替換為: https://
二、完成源代碼修改后,還需更改4處網站設置。

1、在后台 – 全局 – 網站 URL 填寫
https://你的網址

2、在后台 站長 – UCenter 設置 – UCenter 訪問地址填寫
https://你的網址/uc_server

3、在后台 – UCenter – 應用管理 – 點右邊的編輯 – 應用的主 URL 填寫
https://你的網址
如果點擊 UCenter 后出現空白,請右擊新窗口打開。

4、后台界面-風格管理,點擊更新 CSS 緩存,更新緩存,完成!
三、最后我們再對搜索引擎進行一些優化:
方法一: 做301跳轉(百度推薦)
APache 版本在偽靜態規則中添加:
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [L,R]
方法二 (站長推薦)
在后台全局 – 站點信息,下面的“網站第三方統計代碼”處粘貼以下代碼,即可完成搜索引擎已經收錄的 http 訪問不跳轉 https 問題。
<script type=”text/javascript”>
var url = window.location.href;
if (url.indexOf(“https”) < 0) {
url = url.replace(“http:”, “https:”);
window.location.replace(url);
}
</script>
注意:請不要在全局 – SEO設置-其他-其他頭部信息 處粘貼代碼,這樣在帖內不顯示這段代碼的。
Discuz!教程之啟用HTTPS后解決各處遺留http://網址問題
首先,申請並且配置好服務器ssl證書(阿里、騰訊都有免費的,同時都有教程)
配置完畢后需要配置以下幾處
1.后台,全局,站點URL
2.后台,站長,ucenter設置
3.ucenter,應用,編輯
4.修改模版各處http://為https://
這里為模版文件較多的用戶提供一個簡單的批量的https://模版替換教程(開啟偽靜態的可用)
打開source/function/function_core.php
搜索
$content = output_replace($content);
在下面加入
$content = str_replace('http://www.xxx.com','https://www.xxx.com',$content);
如果你有多個二級域名,可以加入
$content = preg_replace('http://(.*?)xxx.com','https://\1xxx.com',$content);
通過以上方法把http可以完美開啟https,但是原來的開啟偽靜態的方法不能正常使用,如果還是按原來開seo偽靜態的方法(
詳解如何設置Discuz論壇偽靜態
),則會提示未登錄用戶訪問的鏈接全找不到,還有就是登錄用戶發帖會出現假失敗(提示發布后,網頁內容鏈接找不到,后退后,測試發布的內容確實成功發布了),目前只有關閉原來開偽靜態的方法,最后請教高手留言解決方法,先謝謝了。
DISCUZ開啟SSL https訪問
dz論壇偽靜態加http跳轉https遺留問題apache配置ssl
Discuz X3.4 3.3 3.2論壇使用SSL完美開啟https教程開啟小綠鎖
[求助] 史上最全!discuz X3.2開啟https的教程
Discuz X3.4論壇偽靜態規則分享
DISCUZ網站部署ssl開啟https訪問頁面錯位的解決方法