由于某种原因,我的 IIS 不会返回任何字体文件。它们都返回 404。我已验证 URL 正确且 MIME 类型正确。字体文件当前位于使用 MVC4 的 .NET 4.5 项目内。当我将文件移出项目,移到服务器的根目录中时,它可以正常提供文件。我已验证项目的 web.config 中没有发生任何对文件扩展名处理方式的覆盖。
到目前为止,这种情况发生在 .TTF、.EOT、.SVG 和 .WOFF 文件中。同一目录中的其他静态文件可以正常返回。IIS8.5 中是否有某些设置阻止返回字体文件?
我已附加失败的请求跟踪生成的日志文件。
答案1
这个问题似乎在项目工作过程中已经自行解决。Andrew Morton 为遇到类似问题的人提供了一些出色的故障排除步骤。我将提供快速列表:
验证服务器是否使用了正确的 MIME 类型。使用 IIS 管理器 > 服务器 > 项目 > MIME 类型。以下是适合我的 MIME 类型列表:
- .eot = 应用程序/vnd.ms-fontobject
- .svg = 图像/svg+xml
- .ttf = 应用程序/八位字节流
- .woff = 应用程序/x-font-woff
如果这不起作用,请验证 Web 服务器是否对项目文件夹和存储文件的文件夹具有权限。以下教程将会有很大帮助。
使用以下工具进行进一步调试进程监控器将有助于缩小更顽固的服务器问题。
希望这对某人有帮助。
答案2
我通过检查 ISS 错误日志中的状态代码来诊断此问题的解决方案。
sc-状态 sc-子状态 sc-win32 状态
500 0 1346
win32 状态表明
错误_糟糕的模仿_级别
1346(0x542)
未提供所需的模拟级别,或者提供的模拟级别无效。
https://docs.microsoft.com/en-gb/windows/win32/debug/system-error-codes--1300-1699-
事实证明,有一篇有关此故障的 MS 文章。
检查相应应用程序的应用程序池标识是否属于“身份验证后模拟客户端”策略的一部分。要求应用程序池标识必须是此策略的一部分,直接或通过继承成员身份。
要检查此策略 – 转到开始 –> 运行 –> secpol.msc –> 本地策略 –> 用户权限分配
对我来说,问题是该策略缺少“IIS_IUSRS”组。
答案3
尝试这个:
- 在[你选择的编辑器]中创建一个 html 文件,向浏览器输出一些描述性内容,以便你知道它已被解决:
震颤性谵妄,没什么大不了的
- 测试它以确保它是有效的 html
- 将其放在字体来源目录中 - 由 [您选择的浏览器] 的开发工具中的 404 错误证明(应该是相对路径)
- 导航至它 - 它解决了吗?
如果是,那么这是你的应用服务器的 mime 类型配置问题
如果不是,则说明您的字体未解析,因为预期路径不正确 - 查看 .html 文件的 404 错误,它应该通过显示相对于 Web 根目录的 unc 路径来揭示应用服务器从何处寻找您的字体