根本原因是浏览器对混合内容的主动拦截,当HTTPS页面加载HTTP协议或协议相对路径的字体时,Chrome、Firefox、Safari会直接阻止请求并显示blocked:mixed-content,而非404;需检查Network面板中字体请求状态,确认src: url()使用相对路径(如./fonts/pma.woff2)或绝对路径(以/开头),禁用硬编码http://或//,同时确保Web服务器正确返回font/woff2 MIME类型,并清除浏览器缓存验证。

HTTPS环境下phpMyAdmin主题字体图标加载失败,根本原因是浏览器对混合内容(mixed content)的主动拦截——当页面通过HTTPS加载,但CSS中@font-face引用的.woff2等字体文件路径是HTTP协议或协议相对路径(//)时,现代浏览器(Chrome、Firefox、Safari)会直接阻止请求,Network面板里显示blocked:mixed-content,而非404。
检查Network面板是否出现mixed-content拦截
打开开发者工具 → Network → 刷新页面 → 筛选fonts或woff2 → 查看字体请求的状态。若状态列显示blocked或响应为空白,且预览/响应标签页提示Failed to load response data,基本可确认是混合内容被拦截。这不是服务器没返回,而是浏览器在请求发出前就拒绝了。
- 不要只看HTTP状态码(如200),
blocked:mixed-content不会返回任何状态码,它发生在网络层之前 - 右键该请求 → “Copy” → “Copy link address”,粘贴到新标签页手动访问:如果能正常下载,说明服务端完全正常,纯属协议不匹配
- 注意:Nginx/Apache日志里通常查不到这类请求记录,因为压根没发到服务器
定位CSS中@font-face的url()是否含硬编码HTTP
phpMyAdmin主题(如pmahomme)的字体声明一般在themes/pmahomme/css/theme.css或内联中。搜索@font-face,重点检查src: url(...)里的路径写法:
- ❌ 错误示例:
src: url('http://your-domain.com/themes/pmahomme/fonts/pma.woff2')—— 明确写了http://,HTTPS页下必拦 - ❌ 危险示例:
src: url('//your-domain.com/themes/pmahomme/fonts/pma.woff2')—— 协议相对URL,在某些CDN或反向代理配置下可能仍降级为HTTP - ✅ 正确做法:
src: url('./fonts/pma.woff2')或src: url('/phpmyadmin/themes/pmahomme/fonts/pma.woff2')—— 使用相对路径或绝对路径(以/开头),由当前页面协议自动继承
验证Web服务器是否正确返回font MIME类型
即使路径和协议都对,若Nginx/Apache未配置.woff2的MIME类型,浏览器收到的响应头Content-Type可能是text/plain或application/octet-stream,导致字体解析失败(尤其Safari更严格)。
- Nginx需在
http或server块中添加:types { font/woff2 woff2; font/woff woff; application/vnd.ms-fontobject eot; font/ttf ttf; } - Apache需确保
mime_module启用,并在.htaccess或虚拟主机配置中加入:AddType font/woff2 .woff2 AddType font/woff .woff
- 验证方式:在Network面板点击字体请求 → 查看Response Headers → 确认
Content-Type: font/woff2
为什么$cfg['ThemePath']配置错误会让字体失效?
$cfg['ThemePath']控制的是phpMyAdmin生成的所有静态资源URL前缀,包括CSS、JS、图片,也间接影响CSS内部相对路径的解析基准。它不是文件系统路径,而是Web可访问路径。
- 必须以
./开头(例如$cfg['ThemePath'] = './themes';),否则Nginx/Apache可能因location匹配规则忽略该路径,导致/themes/pmahomme/css/theme.css本身404,连带字体声明都失效 - 不能写成
https://...或/var/www/...,前者跨域且冗余,后者是绝对文件路径,Web服务器无法提供 - 软链接部署时,
./themes指向的是链接目标下的themes/,要同步检查该目录权限和MIME配置
最易被忽略的一点:改完CSS或配置后,浏览器可能缓存了旧的theme.css,导致你修改的url()根本没生效。强制刷新(Ctrl+Shift+R)并清空“Cached images and files”再测,比反复改配置更有效。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











