Điểm:1

Đang cố gắng để Apache phục vụ webp thay vì png/jpg (từ thư mục /img của prestashop)

lá cờ cn

Bài viết đầu tiên ở đây, vì vậy tôi hy vọng tôi đã làm tốt.

Tôi đã chuyển đổi tất cả png/jpg bắt đầu từ thư mục public_html prestashop của mình thành webp và thêm các quy tắc viết lại vào .htaccess để webp được phục vụ thay vì png/jpg.

Tôi dựa trên các bản viết lại của mình dựa trên các bản viết lại của prestashop hiện có. Nơi tôi đã có:
RewriteRule ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/ p/$1/$1$2$3.jpg [L]
Tôi đã kết thúc việc làm:

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]

Cái nào hoạt động: Tôi có URL jpg phục vụ hình ảnh webp, cho đến nay vẫn rất tốt (tôi biết vẫn cần triển khai

#RewriteCond %{HTTP_ACCCEPT} hình ảnh/webp
#RewriteCond %{DOCUMENT_ROOT}/$1.webp -f

và cũng như cố gắng tìm hiểu xem tôi có nên rời đi không [L] hoặc làm [L,T=hình ảnh/webp] hoặc làm [T=hình ảnh/webp,E=REQUEST_image], đó là lý do tại sao tôi đang đọc các tài liệu liên quan đến apache và thu thập dữ liệu trên web về việc viết lại các chủ đề liên quan, điều này thực sự rất lớn.

Ok, quay lại chủ đề chính, tôi thấy rằng tôi đã thiếu một bản viết lại webp cho những hình ảnh mà prestashop lưu trữ trong thư mục public_html/img.

Sau đó, tôi đã thử các cách sau (và các biến thể khác):

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

^--- KHÔNG OK... vẫn phục vụ hình ảnh loại jpg/png từ thư mục img (đã kiểm tra kỹ Loại MIME).

Lưu ý rằng:

  1. Mỗi lần tôi thay đổi .htaccess và thử một giải pháp, tôi đã xóa bộ nhớ cache của prestashop, đề phòng (mặc dù biết .htaccess được đọc ở mọi yêu cầu).
  2. hình ảnh webp tương ứng với jpg/png trong thư mục img tồn tại.
  3. perms tệp hình ảnh là chính xác trong thư mục img và thực sự trong tất cả nội dung trong public_html
  4. Trong thư mục img trong prestashop, có một .htaccess khác, hạn chế loại tệp có thể được cung cấp từ thư mục này và tôi đã thêm webp rồi, đề phòng ai đó hỏi.

CẬP NHẬT: Theo yêu cầu của MrWhite, thêm .htaccess của thư mục 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>

Xin vui lòng các bạn có thể vui lòng giúp tôi ở đây?

lá cờ kz
"Trong thư mục img trong prestashop, có một .htaccess khác" - Vui lòng chỉnh sửa câu hỏi của bạn để bao gồm nội dung của tệp `.htaccess` này.
Điểm:0
lá cờ kz
RewriteRule ^/img/(.+)\.jpe?g$ /img/$1.webp [L]
RewriteRule ^/img/(.+)\.png$ /img/$1.webp [L]

Trong .htaccess các tệp, đường dẫn URL mà viết lại quy tắc mẫu so khớp, không bắt đầu bằng dấu gạch chéo. Vì vậy, các lệnh trên sẽ không bao giờ khớp với URL được yêu cầu, vì vậy sẽ không làm gì cả.Trong các quy tắc trước đó của bạn, bạn khớp với một chữ số là ký tự đầu tiên, không phải dấu gạch chéo.

Ví dụ: nó phải là:

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

Tuy nhiên...

Trong thư mục img trong prestashop, có một cái khác .htaccess

Tùy thuộc vào các chỉ thị có trong /img/.htaccess tệp thì các lệnh này có thể ghi đè hoàn toàn các lệnh mod_rewrite trong tệp gốc .htaccess tập tin. Các chỉ thị mod_rewrite trong cha mẹ .htaccess thậm chí có thể không được xử lý.

CẬP NHẬT: Bây giờ đã nhìn thấy /img/.htaccess tệp thì không sao - các lệnh này sẽ không vượt qua các lệnh trong phần gốc .htaccess tập tin liên quan đến việc viết lại yêu cầu cho .webp hình ảnh.

Vì các quy tắc bổ sung này chỉ áp dụng cho /img thư mục con và bạn đã có một .htaccess tập tin trong /img thư mục con thì bạn có thể viết các quy tắc này trong /img/.htaccess tập tin thay thế (yêu cầu điều chỉnh nhẹ). Ví dụ:

# /img/.htaccess

Viết LạiEngine Trên

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

Các viết lại quy tắc mẫu khớp với đường dẫn URL liên quan đến vào thư mục chứa .htaccess tập tin. Vì vậy, trong trường hợp này, nó không phù hợp với /img thư mục con.


Để hoàn thành quy tắc và kết hợp các điều kiện khác mà bạn đã đề cập, bạn có thể làm như sau. Bây giờ trở lại thư mục gốc .htaccess tập tin:

# /.htaccess

# Viết lại yêu cầu hình ảnh thành ".webp" nếu được hỗ trợ và tồn tại
RewriteCond %{HTTP_ACCCEPT} hình ảnh/webp
RewriteCond %{DOCUMENT_ROOT}/$1.webp -f
RewriteRule ^(img/.+)\.(jpe?g|png)$ $1.webp [L,T=image/webp]

Nếu tương ứng .webp hình ảnh được đảm bảo tồn tại thì bạn không nhất thiết cần kiểm tra hệ thống tệp (điều kiện thứ hai).

(Tôi không chắc tại sao bạn lại cần E=REQUEST_image?)

Và nếu sử dụng .htaccess tập tin trong /img thư mục con:

# /img/.htaccess

# Viết lại yêu cầu hình ảnh thành ".webp" nếu được hỗ trợ và tồn tại
RewriteCond %{HTTP_ACCCEPT} hình ảnh/webp
RewriteCond %{DOCUMENT_ROOT}/img/$1.webp -f
RewriteRule ^(.+)\.(jpe?g|png)$ $1.webp [L,T=image/webp]

Qua một bên:

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]

Quy tắc thứ 3 không làm bất cứ điều gì và nên được loại bỏ. Và hai quy tắc đầu tiên có thể được kết hợp dễ dàng bằng cách sử dụng xen kẽ biểu thức chính quy trên phần mở rộng tệp. ví dụ. (jpg|webp).

lá cờ cn
Nó hoạt động (Tôi đã chọn cách tiếp cận "trong img/".htaccess mà bạn đã đề xuất). Cảm ơn bạn rất nhiều vì các giải pháp được đề xuất và giải thích toàn diện! Và vâng, trước khi tôi nhận được phản hồi, trong thời gian chờ đợi, tôi đã thử biểu thức chính quy trên web này [link](https://htaccess.madewithlove.com/) và nhận thấy rằng tôi phải xóa dấu gạch chéo ở tiêu đề để có kết quả khớp. Vẫn nhờ có bạn tôi đã nhận được điều này và nhiều hơn nữa rất rõ ràng bây giờ.
lá cờ cn
Về nhận xét của bạn về "dòng thứ 3": Điều này đã có trong .htaccess mặc định do prestashop tạo ra và tôi nghĩ rằng nó đã được sử dụng để có được "url thân thiện".
lá cờ kz
@Totoro Được rồi, rất có thể. Tuy nhiên, trong bộ ba quy tắc "mới" của bạn, quy tắc đầu tiên của bạn sẽ viết lại yêu cầu `.jpg` thành `.webp` trước, vì vậy yêu cầu thứ 3 không bao giờ được xử lý.Tuy nhiên, nếu bạn thêm _conditions_ đã đề cập vào quy tắc đầu tiên thì quy tắc thứ 3 sẽ có mục đích là mệnh đề "khác" khi (nếu) quy tắc đầu tiên không thành công.
lá cờ cn
Cảm ơn một lần nữa @MrWhite vì lời giải thích toàn diện (một lần nữa) :)!

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.