.htaccess 如何修复';缺少跨源资源共享(CORS)响应头';网络字体问题?

.htaccess 如何修复';缺少跨源资源共享(CORS)响应头';网络字体问题?,.htaccess,fonts,cors,font-face,webfonts,.htaccess,Fonts,Cors,Font Face,Webfonts,由于某些原因,字体已停止在我的网站上呈现。字体存储在本地,与站点位于同一服务器上 我查找了这个问题,似乎是缺少跨源资源共享(CORS)响应头,但我无法理解此问题的解决方案 所有不同的网站都说要使用:accesscontrolalloworigin: 但由于我主要是前端,我不知道把它放在哪里。这是我的主人可以帮忙的吗 我能做些什么来解决这个问题 编辑: 有关地点为: 例如,右上角的电话号码应为Bebas字体,但默认为Impact 在控制台中,我得到以下错误: 跨源资源共享策略已阻止加载来自源“”的

由于某些原因,字体已停止在我的网站上呈现。字体存储在本地,与站点位于同一服务器上

我查找了这个问题,似乎是
缺少跨源资源共享(CORS)响应头
,但我无法理解此问题的解决方案

所有不同的网站都说要使用:
accesscontrolalloworigin:

但由于我主要是前端,我不知道把它放在哪里。这是我的主人可以帮忙的吗

我能做些什么来解决这个问题

编辑:

有关地点为:

例如,右上角的电话号码应为Bebas字体,但默认为Impact

在控制台中,我得到以下错误:

跨源资源共享策略已阻止加载来自源“”的字体:“访问控制允许源”标头的值“”不等于提供的源。因此,不允许访问源“”

我联系了我的主人,他说:

Access-Control-Allow-Origin "http://www.cyclistinsuranceaustralia.com.au"

在我的.htaccess文件中,但这没有更改。

如果您只是对使用
访问控制允许源代码感兴趣:

您可以使用站点根目录下的
.htaccess
文件执行此操作

Header set Access-Control-Allow-Origin "*"
以下是一些有用的信息:

在您的特定情况下,问题似乎是从非规范url(www.site.com vs.site.com)访问站点

不必修复CORS问题(这可能需要根据服务提供商使用正确的CORS标题将代理写入服务器字体),您可以将Url规范化为始终位于规范Url上的服务器内容,并在请求不带“www.”的页面时简单地重定向


或者,您可以将字体上载到不同的服务器/CDN,这些服务器/CDN已知配置了CORS头,或者您可以轻松地执行此操作。

我假设您的主机使用的是C-Panel,可能是HostGator或GoDaddy。在这两种情况下,它们都使用C-Panel(事实上,许多主机都使用C-Panel)使服务器管理在最终用户身上尽可能简单。即使您是通过其他人托管-查看您是否可以登录到某种管理面板并找到一个可编辑的.htaccess文件。(注意:前面的句点仅表示它是一个“隐藏”文件/目录)

找到htaccess文件后,添加以下行:

  • Header set Access Control Allow Origin“*”
    只是看看它是否有效。 警告:不要在生产服务器上使用此行
  • 它应该会起作用。如果没有,打电话给你的主人,问他们为什么电话线不工作——他们可能会很快帮你

  • 完成上述工作后,将
    *
    更改为请求域的地址
    http://cyclistinsuranceaustralia.com.au/
    。您可能会发现规范寻址(包括www)存在问题,如果是这样,您可能需要为重定向配置主机。那是一座不同的、更小的桥。你至少会在正确的地方

  • 在HTML中,您设置了一个“基本”标记:

    
    
  • 如果不需要,请从HTML中删除该行。这将使字体在从中查看时正常工作
  • 您可能需要重定向到

  • 亚马逊(AWS)S3预签名帖子在某些浏览器上出现了类似的标题问题

    要点是告诉bucket CORS暴露标题
    访问控制允许原点
    


    此答案中的更多详细信息:

    我们在fontawesome-webfont.woff2在共享主机(Cpanel)上抛出406错误时遇到了这个问题。我正在为Wordpress多站点项目开发难以捉摸的“无cookie域”,我的“www.domain.tld”页面在Chrome中会出现以下错误(3次):

    跨源资源共享策略已阻止加载来自源“”的字体:请求的资源上不存在“访问控制允许源”标题。因此,不允许访问源“”

    在Firefox中,有一点更详细:

    可下载字体:下载失败(字体系列:“FontAwesome”样式:正常重量:正常拉伸:正常src索引:1):错误的URI或不允许跨站点访问源:
    font-awesome.min.css:4:14 已阻止跨源请求:同一源策略不允许读取位于的远程资源。(原因:缺少CORS标头“访问控制允许原点”)

    我找到了QWANT(QWANT.com=fantastic)并发现了这篇文章:

    与不同的共享主机支持人员聊天一个小时(一个人甚至不知道浏览器中的F12…),然后等待对在玩mod_security时没有乐趣而被剪掉的罚单的响应。在此期间,我试图从帖子中拼凑出.htaccess文件的代码,并成功地修复了406个错误,完美无瑕:

        <IfModule mod_headers.c>
        <IfModule mod_rewrite.c>
            SetEnvIf Origin "http(s)?://(.+\.)?domain\.tld(:\d{1,5})?$" CORS=$0
            Header set Access-Control-Allow-Origin "%{CORS}e" env=CORS
            Header merge  Vary "Origin"
        </IfModule>
        </IfModule>
    
    这个修正真的有点让我大吃一惊,因为我以前遇到过这个问题,在财富500强公司工作时,这些公司的开发人员比我的Apache知识库高出几英里,如果不让它调整Apache设置,就无法解决这样的问题

    这是一种神奇的解决方案,可以解决所有无cookie(或者如果使用CloudFlare…)域的CDN问题,以减少cookie带来的不必要的web流量,这些cookie随每个图像请求一起发送,但却像一次糟糕的相亲一样被服务器丢弃

    超级安全,超级优雅。喜欢:你不必向资源窃贼/热链接窃贼类型开放服务器带宽

    这三位才华横溢的人共同努力解决了一度被认为无法与.htaccess解决的问题,我是从他那里拼凑出这段代码的:

    @野洋

    @达夫兰多姆

    @普拉塔普科里塔拉酒店

    我认为您的解决方案就在这里:@croies谢谢,但不幸的是,这对我来说毫无意义
        <IfModule mod_headers.c>
        <IfModule mod_rewrite.c>
            SetEnvIf Origin "http(s)?://(.+\.)?domain\.tld(:\d{1,5})?$" CORS=$0
            Header set Access-Control-Allow-Origin "%{CORS}e" env=CORS
            Header merge  Vary "Origin"
        </IfModule>
        </IfModule>
    
    SetEnvIf Origin "http(s)?://(.+\.)?(othersite\.com|mywebsite\.com)(:\d{1,5})?$" CORS=$0