如何解决Bootstrap CSS字体在Nginx和Apache上跨域的问题
在将前端分离的时候容易遇到的问题,大多表现为CSS引用字体出现同源策略错误,具体错误提示内容为:
Font from origin 'http://local.static' has been blocked from loading by Cross-Origin Resource Sharing policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://local.knowbike' is therefore not allowed access.
提供两种主流服务器软件的解决方案:
Nginx配置方法
location ~ .*\.(js|eot|css|otf|ttc|ttf|woff|woff2|svg)?$ { add_header Access-Control-Allow-Origin *; #这里可替换成你的域名 expires 7d; } }
使用命令 /usr/sbin/nginx -t
测试conf文件是否有误,如无误重启Nginx
systemctl restart nginx
Apache配置方法
在.htaccess
中添加
<IfModule mod_headers.c> <FilesMatch "\.(js|eot|css|otf|ttc|ttf|woff|woff2|svg)$"> Header set Access-Control-Allow-Origin "*" #这里可替换成你的域名 </FilesMatch> </IfModule>
注意,坑来了:
不少人做了配置仍然无效,是因为Apachehttpd.conf
中需要配置
LoadModule headers_module modules/mod_headers.so
将这行前面的注释取消!
然后重启Apache
systemctl restart httpd
最后重点
一定要清空
一下浏览器缓存,或者CTRL+F5
强制刷新才能见到效果!