Score:1

พยายามให้ Apache ให้บริการ webp แทน png/jpg (จากโฟลเดอร์ /img ของ prestashop)

ธง cn

โพสต์แรกที่นี่ ดังนั้นฉันหวังว่าฉันจะทำได้ดี

ฉันแปลง png/jpg ทั้งหมดโดยเริ่มต้นจากโฟลเดอร์ prestashop public_html เป็น webp และเพิ่มกฎการเขียนใหม่ให้กับ .htaccess เพื่อให้ webp ให้บริการแทน png/jpg

ฉันใช้การเขียนซ้ำจากการเขียนซ้ำของ prestashop ที่มีอยู่แล้ว ที่ฉันมี:
RewriteRule ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/ p/$1/$1$2$3.jpg [L]
ฉันลงเอยด้วยการทำ:

RewriteRule ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/ p/$1/$1$2$3.webp [L]
RewriteRule ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.webp$ %{ENV:REWRITEBASE}img/ p/$1/$1$2$3.webp [L]
RewriteRule ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/ p/$1/$1$2$3.jpg [L]

ซึ่งใช้งานได้: ฉันได้ jpg URL ที่แสดงภาพ webp ซึ่งดีมาก (ฉันรู้ว่ายังต้องใช้งาน

#RewriteCond %{HTTP_ACCEPT} ภาพ/เว็บพี
#RewriteCond %{DOCUMENT_ROOT}/$1.webp -f

และพยายามคิดว่าฉันควรจะไปไหม [L] หรือทำ [L,T=รูปภาพ/เว็บ] หรือทำ [T=image/webp,E=REQUEST_image]ซึ่งเป็นเหตุผลที่ฉันกำลังอ่านเอกสารที่เกี่ยวข้องกับ apache และรวบรวมข้อมูลเว็บเกี่ยวกับการเขียนหัวข้อที่เกี่ยวข้องใหม่ซึ่งค่อนข้างเงียบมาก

ตกลง กลับไปที่หัวข้อหลัก ฉันเห็นว่าฉันไม่มี webp rewrite สำหรับรูปภาพที่ prestashop เก็บไว้ในโฟลเดอร์ public_html/img

จากนั้นฉันลองทำสิ่งต่อไปนี้ (และตัวแปรอื่น ๆ ):

RewriteRule ^/img/(.+)\.jpe?g$ /img/$1.webp [L]
RewriteRule ^/img/(.+)\.png$ /img/$1.webp [L]

^--- ไม่เป็นไร... ยังคงให้บริการรูปภาพประเภท jpg/png จากไดเร็กทอรี img (ตรวจสอบประเภท MIME อีกครั้ง)

โปรดทราบว่า:

  1. ทุกครั้งที่ฉันเปลี่ยน .htaccess และลองวิธีแก้ปัญหา ฉันจะล้างแคชของ prestashop ในกรณี (แม้จะรู้ว่า .htaccess ถูกอ่านในทุกคำขอ)
  2. มีภาพ webp ที่สอดคล้องกับ jpg/png ในโฟลเดอร์ img
  3. การอนุญาตไฟล์ภาพนั้นถูกต้องในโฟลเดอร์ img และในทุกสิ่งภายใต้ public_html
  4. ในโฟลเดอร์ img ใน prestashop มี .htaccess อีกอันซึ่งจำกัดประเภทของไฟล์ที่สามารถให้บริการได้จากโฟลเดอร์นี้ และฉันได้เพิ่ม webp ไว้แล้ว เผื่อว่ามีคนถาม

อัปเดต: ตามที่ MrWhite ร้องขอ เพิ่ม .htaccess ของโฟลเดอร์ img

<IfModule mod_php5.c>
    php_flag engine off
</IfModule>

# Apache 2.2
<IfModule !mod_authz_core.c>
    Order deny,allow
    Deny from all
    <Files ~ "(?i)^.*\.(webp|jpg|jpeg|gif|png|bmp|tiff|svg|pdf|mov|mpeg|mp4|avi|mpg|wma|flv|webm|ico)$">
        Allow from all
    </Files>
</IfModule>

# Apache 2.4
<IfModule mod_authz_core.c>
    Require all denied
    <Files ~ "(?i)^.*\.(webp|jpg|jpeg|gif|png|bmp|tiff|svg|pdf|mov|mpeg|mp4|avi|mpg|wma|flv|webm|ico)$">
        Require all granted
    </Files>
</IfModule>

ได้โปรดช่วยฉันที่นี่ได้ไหม

kz flag
"ในโฟลเดอร์ img ใน prestashop มี .htaccess อีกอัน" - โปรดแก้ไขคำถามของคุณเพื่อรวมเนื้อหาของไฟล์ `.htaccess` นี้
Score:0
ธง kz
RewriteRule ^/img/(.+)\.jpe?g$ /img/$1.webp [L]
RewriteRule ^/img/(.+)\.png$ /img/$1.webp [L]

ใน .htaccess ไฟล์ URL เส้นทางที่ เขียนกฎใหม่ ลวดลาย การแข่งขันต่อไม่เริ่มต้นด้วยเครื่องหมายทับ ดังนั้น คำสั่งด้านบนจะไม่ตรงกับ URL ที่ร้องขอ ดังนั้นจะไม่ทำอะไรเลยในกฎก่อนหน้านี้ คุณจะจับคู่กับตัวเลขเป็นอักขระตัวแรก ไม่ใช่เครื่องหมายทับ

ตัวอย่างเช่น ควรเป็น:

RewriteRule ^img/(.+)\.jpe?g$ /img/$1.webp [L]

อย่างไรก็ตาม...

ในโฟลเดอร์ img ใน prestashop มีอีกอันหนึ่ง .htaccess

ขึ้นอยู่กับคำสั่งที่มีอยู่ใน /img/.htaccess ไฟล์คำสั่งเหล่านี้อาจแทนที่คำสั่ง mod_rewrite ในพาเรนต์อย่างสมบูรณ์ .htaccess ไฟล์. คำสั่ง mod_rewrite ในพาเรนต์ .htaccess อาจไม่ได้รับการประมวลผลด้วยซ้ำ

อัปเดต: บัดนี้ได้เห็น /img/.htaccess ไฟล์นั้นก็โอเค - คำสั่งเหล่านี้จะไม่เกินคำสั่งในพาเรนต์ .htaccess ไฟล์เกี่ยวกับการเขียนคำขอใหม่ไปยัง .webp ภาพ

เนื่องจากกฎเพิ่มเติมเหล่านี้ใช้เฉพาะกับ /img ไดเร็กทอรีย่อย และคุณมีไฟล์ .htaccess ไฟล์ใน /img ไดเร็กทอรีย่อย คุณสามารถเขียนกฎเหล่านี้ใน /img/.htaccess ไฟล์แทน (ต้องมีการปรับแต่งเล็กน้อย) ตัวอย่างเช่น:

# /img/.htaccess

RewriteEngine เปิดอยู่

RewriteRule ^(.+)\.jpe?g$ $1.webp [L]

เดอะ เขียนกฎใหม่ ลวดลาย ตรงกับเส้นทาง URL ญาติ ไปยังไดเร็กทอรีที่มีไฟล์ .htaccess ไฟล์. ดังนั้น ในกรณีนี้ จึงไม่ตรงกับข้อ /img ไดเร็กทอรีย่อย


เพื่อให้กฎสมบูรณ์และรวมเงื่อนไขอื่นๆ ที่คุณกล่าวถึง คุณสามารถทำสิ่งต่อไปนี้ ตอนนี้กลับไปที่ราก .htaccess ไฟล์:

# /.htaccess

# เขียนคำขอรูปภาพใหม่เป็น ".webp" หากรองรับและมีอยู่
RewriteCond %{HTTP_ACCEPT} รูปภาพ/webp
RewriteCond %{DOCUMENT_ROOT}/$1.webp -f
RewriteRule ^(img/.+)\.(jpe?g|png)$ $1.webp [L,T=image/webp]

ถ้าตรงกัน .webp อิมเมจรับประกันว่าจะมีอยู่ ดังนั้นคุณไม่จำเป็นต้องตรวจสอบระบบไฟล์ (เงื่อนไขที่สอง)

(ฉันไม่แน่ใจว่าทำไมคุณจะต้อง E=REQUEST_image?)

และถ้าใช้ .htaccess ไฟล์ใน /img ไดเรกทอรีย่อย:

# /img/.htaccess

# เขียนคำขอรูปภาพใหม่เป็น ".webp" หากรองรับและมีอยู่
RewriteCond %{HTTP_ACCEPT} รูปภาพ/webp
RewriteCond %{DOCUMENT_ROOT}/img/$1.webp -f
RewriteRule ^(.+)\.(jpe?g|png)$ $1.webp [L,T=image/webp]

นอกเหนือ:

RewriteRule ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/ p/$1/$1$2$3.webp [L]
RewriteRule ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.webp$ %{ENV:REWRITEBASE}img/ p/$1/$1$2$3.webp [L]
RewriteRule ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/ p/$1/$1$2$3.jpg [L]

กฎข้อที่ 3 ไม่ได้ทำอะไรและควรลบออก และสามารถรวมกฎสองข้อแรกได้อย่างง่ายดายโดยใช้การสลับ regex กับนามสกุลไฟล์ เช่น. (jpg|เว็บพี).

cn flag
ใช้งานได้ (ฉันเลือกวิธี "in img/" .htaccess ที่คุณเสนอ) ขอบคุณมากสำหรับวิธีแก้ปัญหาที่เสนอและคำอธิบายที่ครอบคลุม! และใช่ ก่อนที่ฉันจะได้รับคำตอบ ในระหว่างนี้ฉันได้ลองใช้ regex ในเว็บนี้ [ลิงก์](https://htaccess.madewithlove.com/) และพบว่าฉันต้องลบเครื่องหมายทับหัวเรื่องออกจึงจะจับคู่ได้ ยังต้องขอบคุณคุณ ตอนนี้ฉันได้รับสิ่งนี้และชัดเจนมากขึ้นแล้ว
cn flag
เกี่ยวกับความคิดเห็นของคุณเกี่ยวกับ "บรรทัดที่ 3": สิ่งนี้มีอยู่ใน .htaccess เริ่มต้นที่สร้างโดย prestashop และฉันคิดว่ามันถูกใช้เพื่อเรียก "friendly url"
kz flag
@Totoro ตกลงค่อนข้างเป็นไปได้ อย่างไรก็ตาม ในกฎสามข้อ "ใหม่" ของคุณ กฎข้อแรกจะเขียนคำขอ `.jpg` ใหม่เป็น `.webp` ก่อน ดังนั้นกฎข้อที่ 3 จึงไม่ได้รับการประมวลผลอย่างไรก็ตาม หากคุณเพิ่ม _conditions_ ที่กล่าวถึงในกฎข้อแรก กฎข้อที่ 3 จะมีจุดประสงค์เป็นประโยค "else" เมื่อ (ถ้า) กฎข้อแรกล้มเหลว
cn flag
ขอบคุณ @MrWhite อีกครั้งสำหรับคำอธิบายที่ครอบคลุม (อีกครั้ง) :) !

โพสต์คำตอบ

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