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)
.