Score:3

htaccess เขียนใหม่ /dir/*.jpg เป็น /dir/webp/*.webp เฉพาะเมื่อมีไฟล์ webp

ธง cn

ฉันกำลังพยายามเขียนไฟล์เว็บไซต์ทั้งหมดใหม่ (*.jpg|*.gif|*.png) ถึง *.webp ใน subdir แต่เมื่อ *.webp แฟ้มที่มีอยู่.ไฟล์ก่อนหน้าและไฟล์ใหม่มีชื่อเหมือนกัน เปลี่ยนแค่นามสกุลและ *.webp ไฟล์ทั้งหมดอยู่ภายใต้ subdir ของไฟล์ต้นฉบับ

ฉันกำลังดิ้นรนกับ htaccess เพื่อทำงาน กฎพื้นฐานคือ:

  1. จับคู่เฉพาะไฟล์ PNG/JPG/GIF
  2. รูปแบบ dir ของภาพต้นฉบับคือ: /site/views/00_projects/[ชื่อ DIR หลัก VARIABLE ที่นี่]/content/image/[ชื่อ SUBDIR VARIABLE ที่นี่]/*.jpg
  3. ใหม่ *.webp dir คือรูปแบบคือ: /site/views/00_projects/[VARIABLE DIR NAME HERE]/content/image/[VARIABLE SUBDIR NAME HERE]/webp/*.webp
  4. เขียนใหม่เฉพาะถ้ามีไฟล์ webp

ฉันไม่มีความคิดเกี่ยวกับวิธีการทำให้มันทำงาน ใครสามารถช่วย?

Score:4
ธง kz

พูดอย่างเคร่งครัด คุณต้องแน่ใจว่า user-agent ที่ส่งคำขอสนับสนุนอิมเมจ WEBP (เช่น ตรวจสอบ ยอมรับ ส่วนหัวคำขอ HTTP สำหรับ ภาพ/เว็บ).

ลองทำสิ่งต่อไปนี้ใกล้กับด้านบนสุดของราก .htaccess ไฟล์:

RewriteEngine เปิดอยู่

# เขียนภาพใหม่ไปยัง WebP หากมีอยู่
RewriteCond %{HTTP_ACCEPT} รูปภาพ/webp
RewriteCond %{DOCUMENT_ROOT}/$1/webp/$2.webp -f
RewriteRule ^(site/views/00_projects/[^/]+/content/image/[^/]+)/([^/]+)\.(?:png|jpg|gif)$ $1/webp/$2 .webp [T=image/webp,L]

เดอะ เขียนกฎใหม่ ลวดลาย (เช่น. ^(site/views/00_projects/[^/]+/content/image/[^/]+)/([^/]+)\.(?:png|jpg|gif)$) ตรงกับที่ร้องขอ png, jpg หรือ กิ๊ฟ ภาพและบันทึกเส้นทาง URL ในไฟล์ $1 การอ้างอิงย้อนกลับและชื่อไฟล์ใน $2 การอ้างอิงย้อนกลับ (ใช้ในภายหลังใน เขียนกฎใหม่ การแทน สตริง)

ครั้งแรก เงื่อนไข (เขียนซ้ำ directive) ที่ตรวจสอบกับ HTTP_ACCEPT ตัวแปรเซิร์ฟเวอร์ ตรวจสอบว่า user-agent รองรับอิมเมจ WEBP

ที่สอง เงื่อนไข ตรวจสอบว่ามีภาพ webp เป้าหมายอยู่

เดอะ T=อิมเมจ/เว็บพี จำเป็นต้องตั้งค่าสถานะเพื่อส่งประเภท mime ที่ถูกต้อง (ชนิดของเนื้อหา ส่วนหัว) กลับไปที่ลูกค้า

cn flag
ทำงานเหมือนจับใจ ขอบคุณมาก! คำถามเล็กๆ น้อยๆ: ด้วยโค้ดนี้ URL จะคงพาธไฟล์ต้นฉบับไว้ (ด้วย *.jpg, เช่น); จะต้องเปลี่ยนเส้นทางไปยัง *.webp url path อะไรถ้ามีอยู่และเบราว์เซอร์รองรับ
kz flag
@DiegoFlores ยินดีต้อนรับ สำหรับ _permanent_ "redirect" คุณจะเพิ่มแฟล็ก `R=301` ให้กับคำสั่ง `RewriteRule` และคุณไม่จำเป็นต้องใช้แฟล็ก `T` เช่น. `[R=301,L]`. อย่างไรก็ตาม โดยทั่วไปคุณควรหลีกเลี่ยงการเปลี่ยนเส้นทางจากภายนอกหากเป็นภาพในหน้าเว็บหลายภาพ เนื่องจากอาจทำให้ผู้ใช้ของคุณช้าลง (ไม่ดีต่อ SEO) และเพิ่มคำขอที่ส่งไปยังเซิร์ฟเวอร์ของคุณเป็นสองเท่า ทำให้บันทึกของคุณเต็มไปด้วย 301 สำหรับสิ่งที่ "ปกติ" คำขอ หากคุณกำลังลิงก์ไปยังไฟล์ `.jpg` ฯลฯ ให้เก็บเป็นการเขียนใหม่ภายใน มิฉะนั้น ให้เปลี่ยน URL ที่คุณลิงก์ไป
cn flag
ขอบคุณอีกครั้ง! ฉันจะจำมันไว้! ฉันแค่สงสัยว่า Google จะอ่าน Content-Type ที่ถูกต้องหรือเฉพาะ URL ของไฟล์ด้วยโซลูชันแรกเมื่อประเมิน SEO/PageSpeed/etc ;-) อย่างไรก็ตาม คุณช่วยชีวิตได้ทั้งวัน
kz flag
@DiegoFlores ใช่ Google จะอ่าน "ประเภทเนื้อหาที่ถูกต้อง" นั่นคือจุดประสงค์ของแฟล็ก `T` ไม่ว่า "URL" จะลงท้ายด้วย `.jpg` (หรืออะไรก็ตาม) นั้นไม่เกี่ยวข้อง - ไม่ใช่ URL ที่กำหนดประเภท mime
kz flag
@DiegoFlores หากคำตอบนี้ตอบคำถามของคุณ โปรดทำเครื่องหมายว่า "ยอมรับแล้ว" โดยคลิกเครื่องหมายถูก/เครื่องหมายถูกข้างคำตอบใต้ลูกศรโหวต (เพื่อช่วยผู้อ่านคนอื่นๆ) ขอบคุณชื่นชมมาก :)

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา