通过.htaccess添加安全HTTP头致WordPress站点图片失效,求解决建议
你遇到的图片加载失败问题是由配置里的三处错误导致的:
- Content-Security-Policy(内容安全策略)中的
img-src规则仅允许http协议和base64格式的图片加载,若你的站点是HTTPS协议,站点内的HTTPS图片都会被规则拦截 - Permissions-Policy语法错误,不符合HTTP头规范,可能引发额外的加载异常
- Referrer-Policy配置多了冗余冒号,存在语法错误
修正后的WordPress适配版.htaccess配置
<ifModule mod_headers.c> # 强制HTTPS传输,有效期1年 Header set Strict-Transport-Security "max-age=31536000" env=HTTPS # 开启XSS防护 Header set X-XSS-Protection "1; mode=block" # 禁止MIME类型嗅探 Header set X-Content-Type-Options nosniff # 禁止站点被嵌套iframe Header set X-Frame-Options DENY # 配置引荐来源策略 Header set Referrer-Policy "no-referrer-when-downgrade" # 内容安全策略,适配WordPress常见场景 Header set Content-Security-Policy "default-src 'self'; script-src 'unsafe-inline' 'unsafe-eval' https:; style-src 'unsafe-inline' https:; img-src 'self' https: data: blob:; font-src 'self' https: data:; connect-src 'self' https:; form-action 'self'; frame-ancestors 'none'" # 权限策略,禁用不必要的设备权限 Header set Permissions-Policy "geolocation=(), microphone=(), camera=(), payment=()" </ifModule>
配置优化说明
- 上述CSP规则适配绝大多数WordPress站点场景,如果你使用了第三方CDN、统计服务、嵌入式资源,需要把对应域名加到对应的资源规则中,比如用到自建CDN就把
https://你的CDN域名加到img-src的规则里 - 调试阶段可以把
Content-Security-Policy改为Content-Security-Policy-Report-Only,此时规则只会在浏览器控制台上报错误不会实际拦截资源,调试确认无资源加载异常后再换回正式规则 - 如果你没有开启HTTPS,可以把规则里的
https:改为http:,但强烈建议全站升级HTTPS后再使用上述安全配置
内容的提问来源于stack exchange,提问作者Digital Rishabh
相关产品推荐
相关产品推荐

