在 IIS 上仅对字体文件启用 CORS
Enabling CORS on IIS for only Font files
有没有办法在 IIS7 上只为特定类型的文件启用 CORS?我将离开这篇文章 (https://www.maxcdn.com/one/tutorial/how-to-use-cdn-with-webfonts/) 并注意到 Apache 和 nginx 示例显示仅当请求正在查找特定内容类型时才启用 CORS,而 IIS 示例显示为所有内容启用 CORS。
我有 CSS 被外部站点引用,但字体文件被浏览器阻止,我希望在 IIS7 上启用 CORS,但仅限于 .woff、.woff2、.tff、. eot 和 .svg 文件。如果可能,我不希望为所有内容启用 CORS。
您可以安装 IIS 重写模块 https://www.microsoft.com/en-us/download/details.aspx?id=7435。安装模块后,重新启动您的 IIS 管理器并在“站点”节点下单击您的网站。如果您在 IIS 部分右侧的 window 中看到 URL Rewrite Module 符号(如下所示),那么您就可以开始了:
然后在您的 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>
您应该将此代码添加到您的 Web.config:
<location path="fonts/FontName.ttf">
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
</system.webServer>
</location>
Hackerman 的回答很好,它引导我找到了解决方案,但是,我必须进行一些调整。第一个是将规则放在 rewrite
节点下的 outboundRules
部分。
<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
有没有办法在 IIS7 上只为特定类型的文件启用 CORS?我将离开这篇文章 (https://www.maxcdn.com/one/tutorial/how-to-use-cdn-with-webfonts/) 并注意到 Apache 和 nginx 示例显示仅当请求正在查找特定内容类型时才启用 CORS,而 IIS 示例显示为所有内容启用 CORS。
我有 CSS 被外部站点引用,但字体文件被浏览器阻止,我希望在 IIS7 上启用 CORS,但仅限于 .woff、.woff2、.tff、. eot 和 .svg 文件。如果可能,我不希望为所有内容启用 CORS。
您可以安装 IIS 重写模块 https://www.microsoft.com/en-us/download/details.aspx?id=7435。安装模块后,重新启动您的 IIS 管理器并在“站点”节点下单击您的网站。如果您在 IIS 部分右侧的 window 中看到 URL Rewrite Module 符号(如下所示),那么您就可以开始了:
然后在您的 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>
您应该将此代码添加到您的 Web.config:
<location path="fonts/FontName.ttf">
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
</system.webServer>
</location>
Hackerman 的回答很好,它引导我找到了解决方案,但是,我必须进行一些调整。第一个是将规则放在 rewrite
节点下的 outboundRules
部分。
<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