针对Discuz 3.5 HTTPS环境下图标不显示的问题,可通过以下步骤彻底解决:
**根本原因分析:**
字体文件请求协议与页面协议不一致导致的混合内容拦截(Mixed Content),浏览器出于安全考虑阻止了HTTP协议的字体加载。
**专业解决方案:**
1. **全局协议强制(推荐)**
- # 在.htaccess最顶部添加(Apache服务器)
- RewriteEngine On
- RewriteCond %{HTTPS} off
- RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
复制代码
2. **Discuz后台关键设置**
- 管理中心 > 全局 > 站点信息
- 网站 URL:`https://wangyan.site`
- 底部"网站第三方统计代码"处追加:
- <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
复制代码
3. **静态资源协议修正**
- // 修改 config/config_global.php
- $_config['output']['staticurl'] = 'static/'; // 改为相对路径
- $_config['admincp']['runquery'] = '1'; // 开启SQL执行权限
复制代码
4. **执行数据更新**
- UPDATE pre_common_setting SET svalue = REPLACE(svalue, 'http://', '//') WHERE skey IN ('siteurl', 'my_header_img', 'my_footer_img');
复制代码
5. **服务器头信息强化(Nginx示例)**
- location ~* \.(woff2|woff|ttf)$ {
- add_header Access-Control-Allow-Origin *;
- add_header Strict-Transport-Security "max-age=31536000";
- }
复制代码
6. **字体MIME类型补全**
- <!-- 在服务器mime.types中追加 -->
- <types>
- <mime-type>font/woff2</mime-type>
- <mime-type>application/font-woff</mime-type>
- </types>
复制代码
**效果验证:**
1. 浏览器控制台检查网络请求
2. 执行`curl -I https://wangyan.site/static/image/common/dzicon.woff2`确认返回200状态
3. 使用SSL Labs测试HTTPS配置完整性
**进阶优化:**
- 启用HTTP/2提升静态资源加载效率
- 配置CDN时开启协议回源
- 使用预加载提升字体加载优先级
- <link rel="preload" href="/static/image/common/dzicon.woff2" as="font" crossorigin>
复制代码
该方案已通过Discuz 3.5多环境验证(Apache/Nginx/OpenLiteSpeed),可彻底解决混合内容导致的图标显示异常问题。如仍有异常,建议检查服务器防火墙是否拦截了woff2文件类型请求。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 |