ทำไม @ font-face ถึงข้อผิดพลาด 404 กับไฟล์ woff


422

ฉันใช้@font-faceเว็บไซต์ของ บริษัท และใช้งานได้ / ดูดี ยกเว้น Firefox และ Chrome จะโยนข้อผิดพลาด 404 ลงใน.woffไฟล์ IE ไม่ทิ้งข้อผิดพลาด ฉันมีแบบอักษรอยู่ที่รูท แต่ฉันได้ลองกับแบบอักษรในโฟลเดอร์ css และให้ URL ทั้งหมดสำหรับแบบอักษร หากลบแบบอักษรเหล่านั้นออกจากไฟล์ css ของฉันฉันจะไม่ได้รับ 404 ดังนั้นฉันรู้ว่าไม่ใช่ข้อผิดพลาดทางไวยากรณ์

นอกจากนี้ฉันใช้เครื่องมือ fontsquirrels เพื่อสร้าง@font-faceแบบอักษรและรหัส:

@font-face {
  font-family: 'LaurenCBrownRegular';
  src: url('/laurencb-webfont.eot');
  src: local('☺'), 
    url('/laurencb-webfont.woff') format('woff'), 
    url('/laurencb-webfont.ttf') format('truetype'), 
    url('/laurencb-webfont.svg#webfontaaFhOfws') format('svg');
  font-weight: normal;
  font-style: normal;
}

@font-face {
  font-family: 'FontinSansRegular';
  src: url('/fontin_sans_r_45b-webfont.eot');
  src: local('☺'), 
    url('/fontin_sans_r_45b-webfont.woff') format('woff'), 
    url('/fontin_sans_r_45b-webfont.ttf') format('truetype'), 
    url('/fontin_sans_r_45b-webfont.svg#webfontKJHTwWCi') format('svg');
  font-weight: normal;
  font-style: normal;
}

รุ่นใดที่คุณมีสำหรับ firefox และ chrome Gecko 1.9.2 (Firefox 3.6) เพิ่มการรองรับ WOFF
Sotiris

ลองแปลงเป็น OTF ให้เป็น Woff อีกครั้ง ฉันมีปัญหาที่คล้ายกันและการแยกวิเคราะห์ไฟล์เสียหาย นี่เป็นเว็บไซต์ที่ดีสำหรับการแปลงเป็นฟอนต์ชนิดต่าง ๆ onlinefontconverter.com
stacksonstacksonstacks

คำตอบ:


722

ฉันพบอาการเดียวกันนี้ - 404 ในไฟล์ woff ใน Chrome - และกำลังเรียกใช้แอปพลิเคชันบน Windows Server ที่มี IIS 6

หากคุณอยู่ในสถานการณ์เดียวกันคุณสามารถแก้ไขได้โดยทำสิ่งต่อไปนี้:

โซลูชันที่ 1

"เพียงเพิ่มการประกาศประเภท MIME ต่อไปนี้ผ่านทาง IIS Manager (แท็บส่วนหัว HTTP ของคุณสมบัติเว็บไซต์): .woff application / x-woff "

อัปเดต:ตามMIME Types สำหรับฟอนต์ woffและGrsmสำหรับประเภท MIME จริงคือapplication / x-font-woff (สำหรับ Chrome อย่างน้อย) x-woff จะแก้ไข Chrome 404s และ x-font-woff จะแก้ไขคำเตือนของ Chrome

ในฐานะที่เป็น 2017 : แบบอักษร WOFF ขณะนี้ได้มีมาตรฐานเป็นส่วนหนึ่งของข้อกำหนด RFC8081กับชนิดไมม์และfont/wofffont/woff2

ชนิด IIS 6 MIME

ขอบคุณ Seb Duggan: http://sebduggan.com/posts/serving-web-fonts-from-iis

โซลูชันที่ 2

คุณยังสามารถเพิ่มประเภท MIME ในการกำหนดค่าเว็บ :

  <system.webServer>
    <staticContent>
      <remove fileExtension=".woff" /> <!-- In case IIS already has this mime type -->
      <mimeMap fileExtension=".woff" mimeType="font/woff" />
    </staticContent>    
  </system.webServer>

5
โปรดทราบว่าคุณอาจได้รับข้อผิดพลาดCannot add duplicate collection entry of type ‘mimeMap’ with unique key attribute ‘fileExtension’...เนื่องจากความขัดแย้งกับไฟล์ applicationhost.config คุณสามารถแก้ไขได้โดยเพิ่ม<remove fileExtension=".woff" />สิทธิ์ก่อนที่คุณจะระบุ mimeMap ใหม่ในไฟล์ web.config ของคุณเพื่อลบสำเนาที่ซ้ำกัน
Pete

11
ประเภท MIME application/font-woffได้รับมาตรฐานเป็น
Fernando Correia

5
นี่เป็นกลอุบาย! หากคุณมีปัญหาเดียวกัน แต่มีไฟล์. woff2 เพียงเพิ่มประเภท MIME อื่น (หรือ config) ด้วยส่วนขยายนั้น
mapache

2
ดูเหมือนว่าข้อมูลจำเพาะมีการเปลี่ยนแปลง (อีกครั้ง) คำแนะนำของคุณเก่าเกินไปapplication/x-font-woffเนื่องจากRFC 8081ประเภท mime ที่ถูกต้องอยู่ในขณะนี้font/woffและ font/woff2ดูคำตอบล่าสุดในคำถามที่เชื่อมโยงของคุณ
Liam

3
วิธีนี้ไม่ได้ผลสำหรับฉัน เคล็ดลับอะไรสำหรับฉันคือ: hotcakescommerce.zendesk.com/hc/en-us/articles/ …
Kim Lage

53

คำตอบสำหรับโพสต์นี้มีประโยชน์มากและประหยัดเวลาได้มาก อย่างไรก็ตามฉันพบว่าเมื่อใช้FontAwesome 4.50งานฉันต้องเพิ่มการกำหนดค่าเพิ่มเติมสำหรับwoff2ประเภทของส่วนขยายดังที่แสดงไว้ด้านล่างคำขอwoff2ประเภทอื่นมีข้อผิดพลาด 404 ในเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ของ Chrome ภายใต้คอนโซล> ข้อผิดพลาด

ตามความคิดเห็นโดย S.Serp การกำหนดค่าด้านล่างควรอยู่ใน<system.webServer>แท็ก

<staticContent>
  <remove fileExtension=".woff" />
  <!-- In case IIS already has this mime type -->
  <mimeMap fileExtension=".woff" mimeType="application/x-font-woff" />
  <remove fileExtension=".woff2" />
  <!-- In case IIS already has this mime type -->
  <mimeMap fileExtension=".woff2" mimeType="application/x-font-woff2" />
</staticContent>

3
และแท็กที่คุณกล่าวถึง<staticContent>จะต้องอยู่ใน<system.webServer>แท็ก
S.Serpooshan

ทำงานได้อย่างสมบูรณ์แบบรายงานจาก Windows Server 2012 r2, ASP.Net MVC5
Cromwell

44

ที่จริงคำตอบ @Ian Robinson ใช้งานได้ดี แต่ Chrome จะบ่นต่อไปว่า: " ทรัพยากรตีความเป็นแบบอักษร แต่ถ่ายโอนด้วยแอปพลิเคชันประเภท MIME / x-woff "

ถ้าคุณเข้าใจคุณสามารถเปลี่ยนจาก

แอพลิเคชัน / x-WOFF

ถึง

แอปพลิเคชัน / x -font -woff

และคุณจะไม่มีข้อผิดพลาดของคอนโซล Chrome อีกต่อไป!

(ทดสอบบน Chrome 17)


คุณจะเปลี่ยนสิ่งนี้ที่ไหน ในเบราว์เซอร์หรือบนเซิร์ฟเวอร์?
Jake Wilson

ตามที่อธิบายไว้ในคำตอบข้างต้นมันจะต้องเป็นเซิร์ฟเวอร์ วิธีนี้ใช้สำหรับ Windows Server ที่มี IIS 6
adriendenat

1
โครเมี่ยมยังคงบ่นกับฉันด้วย x-font-woff
Sonic Soul

หากต้องการทบทวนความคิดเห็นของฉันอีกครั้ง: ดูเหมือนว่าข้อมูลจำเพาะมีการเปลี่ยนแปลง (อีกครั้ง) คำแนะนำของคุณเก่าเกินไปapplication/x-font-woffเนื่องจากRFC 8081ประเภท mime ที่ถูกต้องอยู่ในขณะนี้font/woffและ font/woff2ดูคำตอบล่าสุดในคำถามที่เชื่อมโยงของคุณ
Liam

15

โซลูชันสำหรับ IIS7

ฉันยังเจอปัญหาเดียวกัน ฉันคิดว่าการกำหนดค่านี้จากระดับเซิร์ฟเวอร์จะดีกว่าเนื่องจากใช้กับเว็บไซต์ทั้งหมด

  1. ไปที่โหนดรูท IIS และดับเบิลคลิกที่ตัวเลือกการกำหนดค่า "ประเภท MIME"

  2. คลิกลิงก์ "เพิ่ม" ในแผงการกระทำที่ด้านบนขวา

  3. สิ่งนี้จะทำให้เกิดการโต้ตอบ เพิ่มนามสกุลไฟล์. woff และระบุ "application / x-font-woff" เป็นประเภท MIME ที่สอดคล้องกัน

เพิ่มประเภท MIME สำหรับนามสกุลไฟล์. woff

ไปที่ประเภท MIME

เพิ่มประเภท MIME

นี่คือสิ่งที่ฉันทำเพื่อแก้ไขปัญหาใน IIS 7


2
โปรดทราบว่าคำตอบที่ลิงก์อย่างเดียวนั้นไม่ได้รับการสนับสนุนดังนั้นคำตอบควรเป็นจุดสิ้นสุดของการค้นหาโซลูชัน (เทียบกับการหยุดพักระหว่างการอ้างอิงอื่นซึ่งมักจะค้างเมื่อเวลาผ่านไป) โปรดลองเพิ่มบทสรุปแบบสแตนด์อโลนที่นี่โดยคงลิงก์ไว้เป็นข้อมูลอ้างอิง
kleopatra

@kleopatra - อัปเดตคำตอบพร้อมรายละเอียดแล้วนำลิงก์ออก
Dhanuka777

"ฉันคิดว่าการกำหนดค่านี้จากระดับเซิร์ฟเวอร์จะดีกว่าเนื่องจากจะใช้กับเว็บไซต์ทั้งหมด" - ดีขึ้นอยู่กับว่า หากคุณกำลังติดต่อกับเซิร์ฟเวอร์องค์กรซึ่งอาจเรียกใช้แอพภายในหลายตัวใช่คุณพูดถูก ในทางกลับกันหากคุณใช้งานเว็บไซต์สาธารณะซึ่งมีการเผยแพร่ผ่านเซิร์ฟเวอร์หลายแห่งวิธี web.config จะชนะในแง่ของ "ความมั่นคง" (เช่นจะอยู่ที่นั่นคุณจะไม่สามารถลืมกำหนดค่าบน เซิร์ฟเวอร์)
Balázs

10

นอกจากคำตอบของเอียนฉันต้องอนุญาตให้ส่วนขยายแบบอักษรในโมดูลการกรองคำขอเพื่อให้ทำงานได้

<system.webServer>
  <staticContent>
    <remove fileExtension=".woff" />
    <remove fileExtension=".woff2" />
    <mimeMap fileExtension=".woff" mimeType="application/x-font-woff" />
    <mimeMap fileExtension=".woff2" mimeType="application/x-font-woff" />
  </staticContent>
  <security>
      <requestFiltering>
          <fileExtensions>
              <add fileExtension=".woff" allowed="true" />
              <add fileExtension=".ttf" allowed="true" />
              <add fileExtension=".woff2" allowed="true" />
          </fileExtensions>
      </requestFiltering>
  </security>    
</system.webServer>

8

เรียกใช้ IIS Server Manager (เรียกใช้คำสั่ง: inetmgr) เปิด Mime Types แล้วเพิ่มรายการต่อไปนี้

นามสกุลไฟล์: .woff

ประเภท MIME : application / octet-stream


1

ฉันลองใช้สิ่งต่าง ๆ เกี่ยวกับการอนุญาตประเภท mime เป็นต้น แต่สำหรับฉันแล้วมันก็ลงเอยด้วยว่า web.config ได้ลบตัวจัดการไฟล์แบบคงที่ใน IIS แล้วเพิ่มอย่างชัดเจนอีกครั้งสำหรับไดเรกทอรีที่จะมีไฟล์คงที่ ทันทีที่ฉันเพิ่มโหนดตำแหน่งสำหรับไดเรกทอรีของฉันและเพิ่มตัวจัดการกลับคำขอจะหยุดรับ 404 วินาที


1

หากคุณใช้ CodeIgniter ภายใต้ IIS7:

ในไฟล์ web.config ของคุณเพิ่มwoffให้กับรูปแบบ

<rule name="Rewrite CI Index">
  <match url=".*" />
    <conditions>
      <add input="{REQUEST_FILENAME}" pattern="css|js|jpg|jpeg|png|gif|ico|htm|html|woff" negate="true" />
    </conditions>
    <action type="Rewrite" url="index.php/{R:0}" />
 </rule>

หวังว่ามันจะช่วย!


0

สิ่งนี้อาจเห็นได้ชัด แต่มันเพิ่มจำนวนขึ้นเป็น 404 ครั้งฉัน ... ตรวจสอบให้แน่ใจว่าการตั้งค่าการอนุญาตโฟลเดอร์ฟอนต์ถูกต้อง



0

หากคุณไม่มีสิทธิ์เข้าถึงการกำหนดค่าเว็บเซิร์ฟเวอร์คุณสามารถทำได้เพียงเปลี่ยนชื่อไฟล์ฟอนต์เพื่อให้มันจบลงด้วย svg (แต่ยังคงรูปแบบไว้) ทำงานได้ดีสำหรับฉันใน Chrome และ Firefox


0

หากยังไม่สามารถใช้งานได้หลังจากเพิ่มประเภท MIME โปรดตรวจสอบว่า "การพิสูจน์ตัวตนแบบไม่ระบุชื่อ" เปิดใช้งานในส่วนการตรวจสอบความถูกต้องในไซต์และตรวจสอบให้แน่ใจว่าได้เลือก

ป้อนคำอธิบายรูปภาพที่นี่


-1

ชนิด IIS Mime: .woff font / x-woff (ไม่ใช่แอปพลิเคชัน / x-woff หรือแอปพลิเคชัน / x-font-woff)


1
คุณช่วยขยายคำตอบและให้รายละเอียดเกี่ยวกับวิธีแก้ปัญหาได้ไหม
talex


-1

แก้ไขมัน:

ฉันต้องใช้วิธี Mo'Bulletproofer


หมายความว่าคุณไม่ได้ใช้ WOFF อีกต่อไปหรือ เป็นไปได้ไหมที่เว็บเซิร์ฟเวอร์ของคุณไม่ได้รับการกำหนดค่าอย่างเหมาะสมเพื่อให้บริการไฟล์ WOFF เช่นเห็นนี้: stackoverflow.com/questions/3594823/mime-type-for-woff-fonts/...
Mercator

ฉันทดสอบแบบอักษรด้วยการเข้ารหัสกับเครื่องอื่น แสดงผลดีและไม่มีข้อผิดพลาด 404
dcp3450

มันจะไม่ให้ฉัน การเข้ารหัสเป็นวิธียาว มีการอธิบายไว้ที่นี่: paulirish.com/2010/font-face-gotchas
dcp3450

1
ลิงก์ในคำตอบไม่มีอยู่อีกต่อไป
Munim Munna
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.