即使使用“Access-Control-Allow-Origin”标题,CORS也会阻止来自自己服务器的字体?

时间:2016-05-31 09:02:42

标签: .htaccess fonts cors

我无法让CORS在我的服务器上运行。 (Centos 7) 我正在构建一个CMS,您可以在其中构建自己的网站。 每个网站都有自己的目录和自己的vhost文件,指向该目录。此customer-directory仅适用于自定义文件和数据。

目录看起来像这样:

http_docs  /cms-core        /[All app files are here, php, js, css]

           /customer-data   /sources   /css
                                       /js
                            /files     /images
                                       /uploads

每个页面都通过cms-core目录加载,其他资源从/customer-data/sources文件夹加载。

尝试从CMS内部加载customer-data文件夹中的字体时出现以下错误:

  

来自“http://customer-a.dev”的字体已被跨源资源共享策略阻止加载:请求的资源上没有“Access-Control-Allow-Origin”标头。因此,不允许原点“http://cms.dev”访问。

我正在尝试加载Font-awesome CSS文件以向网站添加图标。该文件的第一部分如下所示:

@font-face {
  font-family: 'FontAwesome';
  src: url('../fonts/fontawesome-webfont.eot?v=4.2.0');
  src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');
  font-weight: normal;
  font-style: normal;
}

要解决此问题,我尝试了以下操作:

- 在我的CMS的PHP中为我的页面请求设置标题:

header(Access-Control-Allow-Origin: http://customer-a.dev)

- 更改客户文件夹的.htaccess文件:

AddType application/font-sfnt            otf ttf
AddType application/font-woff            woff
AddType application/font-woff2           woff2
AddType application/vnd.ms-fontobject    eot

<FilesMatch ".(eot|ttf|otf|woff|woff2)">
  Header set Access-Control-Allow-Origin "*"
</FilesMatch>

更改CMS的.htaccess文件:

 Header always set Access-Control-Allow-Origin "*"

- 更改customer-source的vhost文件以允许覆盖:

AllowOverride All

然而似乎没有工作,我仍然得到同样的错误。 我已经在Chrome开发者工具中检查了该文件的GET请求,但是在字体很棒的CSS文件中没有设置响应标头:

Response Headers
    Connection:close
    Date:Tue, 31 May 2016 08:35:39 GMT
    ETag:"1c25aa-681b-5339687101b1f"
    Server:Apache/2.2.15 (CentOS)

我希望这样(从谷歌字体加载字体):

Response Headers
    Access-Control-Allow-Origin:*
    Cache-Control:private, max-age=86400, stale-while-revalidate=604800
    Content-Encoding:gzip
    Content-Length:981
    Content-Type:text/css; charset=utf-8
    etc...

我做错了什么和/或我错过了什么?

修改

以上所有方法都不起作用,所以我一直在搜索并通过将以下内容添加到customer-folder的vhost文件中来实现它:

<VirtualHost *:80>

ServerAdmin bla bla
ServerName  customer.dev
ServerAlias  www.customer.dev customer.dev
DocumentRoot /http_docs/app-core

    <Directory "/http_docs/app-core">
    Options Indexes FollowSymLinks
    AllowOverride all
    Order Deny,Allow
    Allow from all
    </Directory>

Alias /files /http_docs/customer.dev/files

   <Directory "/http_docs/customer.dev/files">
   Header set Access-Control-Allow-Origin "*"          <--------------------
   Options None
   AllowOverride none
   Order Deny,Allow
   Allow from all
   </Directory>

Alias /sources /http_docs/customer.dev/sources

   <Directory "/http_docs/customer.dev/sources">
   Header set Access-Control-Allow-Origin "*"          <--------------------
   Options None
   AllowOverride none
   Order Deny,Allow
   Allow from all
   </Directory>

</VirtualHost>

我真的不明白为什么这个 DOES 工作而且以上所有都没有?

0 个答案:

没有答案