
由於某種原因,我的 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
我透過檢查國際太空站錯誤日誌中的狀態代碼來診斷我的解決方案。
sc-status sc-substatus sc-win32-status
500 0 1346
win32狀態表明
ERROR_BAD_IMPERSONATION_LEVEL
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 路徑來揭示應用程式伺服器從何處查找您的字體