·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

请教各位大侠,Discuz! X3.5如何真正实现全站HTTPS?

186 2
发表于 2023-6-12 07:21:18 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
请教各位大侠,Discuz! X3.5如何真正实现全站HTTPS?



程序版本:Discuz! X3.5 Release 20230520 UTF-8
服务器系统:Linux
PHP版本:PHP v7.2.15
MySQL版本:5.7.25-log

SSL证书已申请,并配置成功,目前出现的问题是,社区页面有的是绿标HTTPS,有的不是,我自己已经先行做过多次排查了,发现主要原因是部分页面存在HTTP链接,例如:
1、首页因为有别的社区的友情链接,部分友情社区没有申请SSL证书,还是HTTP链接,导致首页不是绿标HTTPS;
2、作为一个存在时间比较长的社区站点,部分帖子内容带有的链接很多是HTTP,毕竟HTTPS是近几年才较为普及的。

我自己搜寻了相关解决办法,其中:
1、打开:source/function/function_core.php
2、搜索:$content = output_replace($content);
3、在下面添加:$content = str_replace('http://','https://',$content);
此方法将网站会员发帖和风格里面只要有http://,都会自动成https://,确实是生效了。

但是后续导致错误产生:
1、点击右上角用户头像,进入用户个人中心,页面变为了空白页面;
2、点击首页社区版区的最新发帖,帖子内容不显示,页面也是变成了空白页面。

将function_core.php备份还原后,空白页面就恢复了,但是部分页面因为含有HTTP链接,还是无法实现绿标HTTPS,问题就回到了原地。

我看到过有比较老的社区,页面即使包含了HTTP链接,也不影响社区的HTTPS绿标。
所以请教各位大侠,这个代码问题究竟出在哪里?能否修复使用?或者Discuz! X3.5有什么其他的方法,可以真正实现全站HTTPS?谢谢。
我要说一句 收起回复

评论2

IT618发布Lv.8 发表于 2023-6-12 07:21:37 | 查看全部
X3.5默认不需要修改
我要说一句 收起回复
Discuz智能体Lv.8 发表于 2025-3-18 10:19:58 | 查看全部
要实现Discuz! X3.5全站HTTPS,除了你提到的修改`function_core.php`文件外,还需要注意以下几点:

### 1. **修改配置文件**
在Discuz!的配置文件`config/config_global.php`中,确保以下配置项正确设置:
  1. $_config['cookie']['cookiedomain'] = '.yourdomain.com'; // 替换为你的域名
  2. $_config['cookie']['secure'] = 1; // 启用安全的Cookie
  3. $_config['security']['attackevasive'] = 0; // 关闭攻击防御,避免影响HTTPS
复制代码


### 2. **修改模板文件**
确保所有模板文件中的资源链接(如CSS、JS、图片等)都使用HTTPS。可以通过以下方式批量替换:
- 打开`template`目录下的所有模板文件,搜索`http://`并替换为`https://`。
- 如果模板中有外部资源链接,确保这些资源也支持HTTPS。

### 3. **修改数据库中的链接**
由于Discuz!的帖子内容、用户签名等可能包含HTTP链接,可以通过SQL语句批量替换数据库中的HTTP链接为HTTPS:
  1. UPDATE pre_forum_post SET message = REPLACE(message, 'http://', 'https://');
  2. UPDATE pre_common_member_field_forum SET signature = REPLACE(signature, 'http://', 'https://');
复制代码

**注意:** 在执行SQL语句前,请务必备份数据库。

### 4. **使用Nginx或Apache的强制HTTPS重定向**
在服务器配置中强制将所有HTTP请求重定向到HTTPS。

#### Nginx配置示例:
  1. server {
  2.     listen 80;
  3.     server_name yourdomain.com;
  4.     return 301 https://$host$request_uri;
  5. }

  6. server {
  7.     listen 443 ssl;
  8.     server_name yourdomain.com;

  9.     ssl_certificate /path/to/your/certificate.crt;
  10.     ssl_certificate_key /path/to/your/private.key;

  11.     # 其他配置...
  12. }
复制代码


#### Apache配置示例:
  1. <VirtualHost *:80>
  2.     ServerName yourdomain.com
  3.     Redirect permanent / https://yourdomain.com/
  4. </VirtualHost>

  5. <VirtualHost *:443>
  6.     ServerName yourdomain.com

  7.     SSLEngine on
  8.     SSLCertificateFile /path/to/your/certificate.crt
  9.     SSLCertificateKeyFile /path/to/your/private.key

  10.     # 其他配置...
  11. </VirtualHost>
复制代码


### 5. **处理外部链接**
对于外部链接(如友情链接),如果这些链接不支持HTTPS,可以考虑以下方法:
- **移除不支持HTTPS的友情链接**:如果这些链接不重要,可以考虑移除。
- **使用代理服务**:通过代理服务将HTTP链接转换为HTTPS链接。
- **使用相对协议**:将链接改为`//example.com`,这样浏览器会根据当前页面的协议自动选择HTTP或HTTPS。

### 6. **检查插件和扩展**
确保所有安装的插件和扩展也支持HTTPS。如果有插件使用了外部资源,确保这些资源也支持HTTPS。

### 7. **调试和排查**
如果修改后出现空白页面或其他问题,可以通过以下步骤进行排查:
- 检查PHP错误日志,查看是否有错误信息。
- 逐步回滚修改,找出导致问题的具体代码。
- 使用浏览器的开发者工具,查看网络请求,确认是否有资源加载失败。

### 8. **使用CDN**
如果站点使用了CDN服务,确保CDN也支持HTTPS,并正确配置SSL证书。

### 9. **更新Discuz!版本**
确保使用的是最新版本的Discuz! X3.5,因为新版本可能修复了与HTTPS相关的问题。

### 10. **测试**
完成以上步骤后,使用工具如[SSL Labs](https://www.ssllabs.com/ssltest/)测试站点的HTTPS配置,确保没有遗漏。

通过以上步骤,你应该能够实现Discuz! X3.5的全站HTTPS。如果在实施过程中遇到具体问题,欢迎继续提问。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:18.116.26.90,GMT+8, 2025-4-15 08:43 , Processed in 0.327355 second(s), 74 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表