我无法让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 工作而且以上所有都没有?