有没有办法在IIS7上只为某种类型的文件启用CORS?我将离开这篇文章(https://www.maxcdn.com/one/tutorial/how-to-use-cdn-with-webfonts/)并注意到Apache和nginx示例显示只有在请求查找某个Content-Type时才启用CORS,而IIS示例显示为所有内容启用了CORS。
我在外部网站上引用了CSS,但是浏览器阻止了字体文件,并且希望在IIS7上启用CORS,但仅限于.woff,.woff2,.tff,.eot和.svg文件。如果可能的话,我不希望为所有内容启用CORS。
答案 0 :(得分:23)
Hackerman的答案很棒,它让我找到了解决方案,但是,我必须做出一些调整。第一个是将规则放在outboundRules
节点下的rewrite
部分。
<outboundRules>
<rule name="Enable CORS for Fonts">
<match serverVariable="RESPONSE_Access_Control_Allow_Origin" pattern=".*" />
<conditions>
<add input="{REQUEST_URI}" pattern="^[^\?]+\.(ttf|otf|eot|woff|woff2|svg)(\?.*)?$" />
</conditions>
<action type="Rewrite" value="*" />
</rule>
</outboundRules>
最后,正则表达式已更新,以防止下面的请求,这将允许有人请求跨源的任何URL:
/some/critical/javascript/file.js?v=.woff
/api/secure/users?v=.woff
...但它仍然允许以下
/some/font.woff
/some/font.woff?etag
/some/font.woff?v=123
答案 1 :(得分:12)
您应该将此代码添加到Web.config:
<location path="fonts/FontName.ttf">
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
</system.webServer>
</location>
答案 2 :(得分:-1)
您可以安装IIS重写模块PHP's session_destroy()
documentation。安装模块后,重新启动IIS管理器,然后单击“站点”节点下的网站。如果您在IIS部分右侧的窗口中看到URL重写模块符号(如下所示),那么您就可以开始了:
https://www.microsoft.com/en-us/download/details.aspx?id=7435
然后在您的Web.config上,您需要添加以下规则:
<rewrite>
<rules>
<rule name="Add Cross Origin Access">
<match serverVariable="RESPONSE_Access_Control_Allow_Origin" pattern=".*" />
<conditions>
<add input="{REQUEST_URI}" pattern="^[^\?]+\.(ttf|otf|eot|woff|woff2|svg)(\?.*)?$" />
</conditions>
<action type="Rewrite" value="*"/>
</rule>
</rules>
</rewrite>