Puncte:1

Încercarea de a face Apache să servească webp în loc de png/jpg (din folderul /img al prestashopului)

drapel cn

Prima postare aici, așa că sper că am făcut-o bine.

Am convertit toate png/jpg începând din folderul meu prestashop public_html în webp și am adăugat reguli de rescriere în .htaccess pentru a avea webp-ul servit în loc de png/jpg.

Mi-am bazat rescrierile pe rescrierile prestashop deja existente. Unde am avut:
RewriteRule ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/ p/$1/$1$2$3.jpg [L]
am ajuns sa fac:

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]

Ceea ce funcționează: am o adresă URL jpg care deservește imagini webp, până acum e bine (știu că mai trebuie să implementez

#RewriteCond %{HTTP_ACCEPT} imagine/webp
#RewriteCond %{DOCUMENT_ROOT}/$1.webp -f

și, de asemenea, încearcă să-mi dau seama dacă ar trebui să plec [L] sau faci [L,T=imagine/webp] sau faci [T=imagine/webp, E=REQUEST_image], motiv pentru care citesc documente legate de apache și accesez cu crawlere web despre subiecte legate de rescrie, ceea ce este într-adevăr uriaș.

Ok, deci revenind la subiectul principal, am vazut ca imi lipsea o rescrie webp pentru imaginile pe care prestashop le depoziteaza in folderul public_html/img.

Apoi am încercat următoarele (și deci și alte variante):

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

^--- NU E OK... încă servesc imagini de tip jpg/png din directorul img (a verificat de două ori tipul MIME).

Rețineți că:

  1. De fiecare dată când am schimbat .htaccess și am încercat o soluție, am șters cache-ul prestashop, pentru orice eventualitate (în ciuda faptului că .htaccess este citit la fiecare solicitare).
  2. Există imagini webp corespunzătoare jpg/png din folderul img.
  3. Perms fișierul imagine este corect în folderul img și într-adevăr în toate lucrurile din public_html
  4. În folderul img din prestashop, există un alt .htaccess, care restricționează tipul de fișiere care pot fi servite din acest folder, și am adăugat deja webp, în caz că cineva ar întreba.

ACTUALIZAȚI: După cum a cerut MrWhite, adăugarea .htaccess al folderului 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>

Vă rog, ați putea să mă ajutați aici?

drapel kz
„În folderul img din prestashop, există un alt .htaccess” - Vă rugăm să editați întrebarea pentru a include conținutul acestui fișier `.htaccess`.
Puncte:0
drapel kz
RewriteRule ^/img/(.+)\.jpe?g$ /img/$1.webp [L]
RewriteRule ^/img/(.+)\.png$ /img/$1.webp [L]

În .htaccess fișiere, calea URL pe care RewriteRule model meciuri împotriva, nu începe cu o bară oblică. Deci directivele de mai sus nu se vor potrivi niciodată cu URL-ul solicitat, așa că nu vor face nimic.În regulile tale anterioare, potriviți cu o cifră ca prim caracter, nu cu o bară oblică.

De exemplu, ar trebui să fie:

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

In orice caz...

În folderul img din prestashop, există altul .htaccess

În funcţie de directivele cuprinse în /img/.htaccess fișier, atunci aceste directive ar putea suprascrie complet directivele mod_rewrite din părinte .htaccess fişier. Directivele mod_rewrite din părinte .htaccess s-ar putea să nu fie nici măcar procesat.

ACTUALIZAȚI: După ce am văzut acum /img/.htaccess fișier, atunci este OK - aceste directive nu vor trece peste directivele din părinte .htaccess dosar cu privire la rescrierea cererii către .webp imagini.

Deoarece aceste reguli suplimentare se aplică numai pentru /img subdirector și aveți deja un .htaccess dosar în /img subdirectorul, atunci puteți scrie aceste reguli în /img/.htaccess fișier în schimb (este necesară o ușoară ajustare). De exemplu:

# /img/.htaccess

RewriteEngine Pornit

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

The RewriteRule model potrivește cu calea URL relativ la directorul care conține .htaccess fişier. Deci, în acest caz, nu se potrivește cu /img subdirectorul.


Pentru a completa regula și a încorpora celelalte condiții pe care le-ați menționat, puteți face următoarele. Acum înapoi în rădăcină .htaccess fişier:

# /.htaccess

# Rescrieți cererea de imagine în „.webp” dacă este acceptată și există
RewriteCond %{HTTP_ACCEPT} imagine/webp
RewriteCond %{DOCUMENT_ROOT}/$1.webp -f
RewriteRule ^(img/.+)\.(jpe?g|png)$ $1.webp [L,T=imagine/webp]

Dacă corespunzătoare .webp imaginea este garantată că există, atunci nu aveți neapărat nevoie de verificarea sistemului de fișiere (a doua condiție).

(Nu sunt sigur de ce ai avea nevoie E=REQUEST_image?)

Și dacă folosiți .htaccess dosar în /img subdirector:

# /img/.htaccess

# Rescrieți cererea de imagine în „.webp” dacă este acceptată și există
RewriteCond %{HTTP_ACCEPT} imagine/webp
RewriteCond %{DOCUMENT_ROOT}/img/$1.webp -f
RewriteRule ^(.+)\.(jpe?g|png)$ $1.webp [L,T=imagine/webp]

Deoparte:

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]

A treia regulă nu face nimic și ar trebui eliminată. Și primele două reguli pot fi combinate cu ușurință folosind alternanța regex pe extensia fișierului. de exemplu. (jpg|webp).

drapel cn
Funcționează (am ales abordarea „in img/” .htaccess pe care ai propus-o). Vă mulțumesc mult pentru soluțiile propuse și explicațiile cuprinzătoare! Și da, înainte de a primi răspuns, între timp am încercat regex-ul pe acest web [link](https://htaccess.madewithlove.com/) și am constatat că trebuie să elimin slash-ul de titlu pentru a obține o potrivire. Totuși, mulțumită ție, am înțeles asta și mai mult acum foarte clar.
drapel cn
În ceea ce privește comentariul tău despre „linia a treia”: Acesta a fost prezent în .htaccess implicit, așa cum este generat de prestashop și cred că a fost folosit pentru a obține „url prietenos”.
drapel kz
@Totoro Ok, foarte posibil. Cu toate acestea, în „noul” trio de reguli, prima regulă va rescrie prima cerere `.jpg` în `.webp`, astfel încât a treia nu este niciodată procesată.Dacă, totuși, adăugați _condițiile_ menționate la prima regulă, atunci a treia regulă ar avea un scop ca o clauză „altfel” atunci când (dacă) prima regulă ar eșua.
drapel cn
Mulțumesc din nou @MrWhite pentru explicația cuprinzătoare (din nou) :)!

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.