我有一台运行apache的服务器。 .htaccess包含以下内容:
<IfModule mod_headers.c>
<FilesMatch "\.(eot|ttf|otf|woff|css)$">
Header add Access-Control-Allow-Origin "*"
</FilesMatch>
</IfModule>
为什么会这样?
$.get('https://www.sarahlawrence.edu/_assets/v6/fonts/otama-text-regular/otamatextregular.eot')`
有效(在任何域的控制台中尝试),而
$.get('https://www.sarahlawrence.edu/_assets/v6/lib/icons.data.svg.css')
因此错误而失败:
XMLHttpRequest无法加载https://www.sarahlawrence.edu/_assets/v6/lib/icons.data.svg.css。 No&#39; Access-Control-Allow-Origin&#39;标头出现在请求的资源上。起源&#39; https://whatever.com&#39;因此不允许访问。
我怎样才能让它发挥作用?
答案 0 :(得分:2)
可以使用curl确认丢失的标题:
curl -v https://www.sarahlawrence.edu/_assets/v6/fonts/otama-text-regular/otamatextregular.eot > delme.txt
curl -v https://www.sarahlawrence.edu/_assets/v6/lib/icons.data.svg.css > delme.txt
正则表达式应该对文件名感到满意,所以我希望问题是因为apache配置中某处存在冲突配置。 另一个诊断检查是将失败的文件复制到fonts目录并检查标头是否存在 - 这将确认正则表达式或文件名不是问题,但表明它与目录配置相关。
您已声明文档根目录或子文件中没有其他.htaccess文件(这可能会导致问题)并且文件正在没有标题的情况下提供。
我在这个阶段的感觉是,这可能与你的mod_pagespeed有关,而这对于lib / icons是禁用的。它甚至可以归结为正在加载的模块的排序。
为了以防万一,我会先重启你的apache。应禁用其间的任何缓存或代理基础结构。接下来我将禁用mod_pagespeed并查看问题是否仍然存在。
我还要检查一下你的httpd.conf或虚拟主机配置中是否有一个配置块,因为它可能会捕获一些目录而不是其他目录,并且你的.htaccess不是做着预期的事。作为进一步检查,我会尝试删除或暂时重命名.htaccess(删除htaccess或类似内容)以确认使用curl或其他方法验证CORS标头不再包含URL请求标头。
可能没有关联,但我检查的另一件事是文件和目录的权限和所有权 - 值得一提的是以防万一。
同样值得检查重启apache和发出请求时的错误日志,这可能会提供进一步的见解。
答案 1 :(得分:0)
.htaccess
文件的完整路径是什么?
以太网.htaccess
文件未设置为将其应用于https://www.sarahlawrence.edu/_assets/v6/lib/位置中的文件的规则,或者其他规则取代上面显示的规则。