HTTPS配置后SEO工具提示存在混合内容错误怎么办?
最近给网站配置了HTTPS,但SEO检测工具总提示存在混合内容错误。我已经检查过所有资源链接了,但问题还是没解决:
.header-logo {
background: url(http://example.com/images/logo.png) no-repeat;
}
发现是CSS里这张logo图片用了http协议的绝对路径。尝试改写成标签的srcset属性用https也没用,SEO工具还是报错。用curl检查响应头时,发现服务器返回了200状态码,但页面加载时控制台还是出现Mixed Content警告。难道CSS里的图片链接也要强制用https协议吗?有没有更好的解决办法?
不过挨个改太麻烦了,我建议直接用协议相对路径,或者干脆改成//开头的链接,这样能自动适配当前页面的协议。拿去改改:
.header-logo {
background: url(//example.com/images/logo.png) no-repeat;
}
如果你用的是Apache服务器,也可以在.htaccess里强制把HTTP请求跳转到HTTPS,加上这么一段:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
还有种更省事的办法,直接在页面里加个meta标签告诉浏览器强制加载HTTPS资源:
这三个办法都行,看你自己需求选一个吧。记得改完清除缓存再测试,别问我为啥知道要提醒这个。
解决办法有几个方向,最直接的就是把CSS里的图片链接改成https协议。如果图片资源和网站是同一个域名,建议直接用相对协议的写法,比如这样:
这种写法会根据当前页面的协议自动匹配http或者https,省得以后再改。
如果你懒得一个个找资源链接,可以在服务器层面做统一处理。比如在Nginx配置里强制把所有http请求重写成https:
另外还可以通过Content Security Policy(CSP)来进一步控制资源加载策略,确保所有子资源都走HTTPS。在Nginx或Apache里加上这个响应头:
这个配置会让浏览器自动把页面里所有不安全的http请求升级成https。
最后提醒一下,改完配置记得清理浏览器缓存,不然可能看不到效果。之前我遇到过类似问题,折腾半天发现是缓存捣的鬼,真是无语。