Primeiro post aqui, espero ter feito bem.
Eu converti todos os png/jpg a partir da minha pasta public_html prestashop para webp e adicionei regras de reescrita ao .htaccess para que o webp fosse servido em vez de png/jpg.
Eu baseei minhas reescritas nas reescritas do prestashop já existentes. Onde eu tinha:
RewriteRule ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$1$2$3.jpg [L]
Acabei fazendo:
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]
O que funciona: eu tenho um URL jpg servindo imagens webp, até agora tudo bem (eu sei que ainda preciso implementar
#RewriteCond %{HTTP_ACCEPT} image/webp
#RewriteCond %{DOCUMENT_ROOT}/$1.webp -f
e também tentar descobrir se devo sair [L]
ou fazer [L,T=image/webp]
ou fazer [T=image/webp,E=REQUEST_image]
, e é por isso que estou lendo documentos relacionados ao apache e rastreando a web sobre reescrever tópicos relacionados, o que é realmente enorme.
Ok, voltando ao tópico principal, vi que estava faltando uma reescrita webp para as imagens que o prestashop armazena na pasta public_html/img.
Então eu tentei o seguinte (e outras variantes):
RewriteRule ^/img/(.+)\.jpe?g$ /img/$1.webp [L]
RewriteRule ^/img/(.+)\.png$ /img/$1.webp [L]
^--- NÃO OK... ainda servindo imagens do tipo jpg/png do diretório img (verifique duas vezes o tipo MIME).
Observe que:
- Toda vez que eu alterava o .htaccess e tentava uma solução, eu limpava o cache do prestashop, por via das dúvidas (apesar de saber que o .htaccess estava sendo lido a cada solicitação).
- Existem imagens webp correspondentes a jpg/png na pasta img.
- perms do arquivo de imagem está correto na pasta img e, de fato, em todas as coisas em public_html
- Na pasta img do prestashop, existe outro .htaccess, que restringe o tipo de arquivos que podem ser servidos desta pasta, e eu já adicionei webp, caso alguém pergunte.
ATUALIZAÇÃO: Conforme solicitado pelo MrWhite, adicionando o .htaccess da pasta 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>
Por favor, vocês poderiam me ajudar aqui?
Nos
.htaccess
arquivos, o caminho de URL com o qual oRewriteRule
padrão corresponde não começa com uma barra. Portanto, as diretivas acima nunca corresponderão à URL solicitada, portanto, não farão nada. Em suas regras anteriores, você está correspondendo a um dígito como o primeiro caractere, não a uma barra.Por exemplo, deve ser:
No entanto...
Dependendo das diretivas contidas no
/img/.htaccess
arquivo, essas diretivas podem substituir completamente as diretivas mod_rewrite no.htaccess
arquivo pai. As diretivas mod_rewrite no pai.htaccess
podem nem estar sendo processadas.ATUALIZAÇÃO: Tendo visto agora o
/img/.htaccess
arquivo agora, está tudo bem - essas diretivas não serão sobre as diretivas no.htaccess
arquivo pai no que diz respeito à reescrita da solicitação nas.webp
imagens.Como essas regras adicionais se aplicam apenas ao
/img
subdiretório e você já tem um.htaccess
arquivo no/img
subdiretório, você pode escrever essas regras no/img/.htaccess
arquivo (é necessário um pequeno ajuste). Por exemplo:O
RewriteRule
padrão corresponde ao caminho de URL relativo ao diretório que contém o.htaccess
arquivo. Então, neste caso, não combina com o/img
subdiretório.Para completar a regra e incorporar as outras condições que você mencionou, você pode fazer o seguinte. Agora de volta ao arquivo raiz
.htaccess
:Se o correspondente
.webp
imagem correspondente for garantida, você não precisa necessariamente da verificação do sistema de arquivos (a segunda condição).(Eu não tenho certeza por que você precisaria
E=REQUEST_image
?)E se estiver usando o
.htaccess
arquivo no/img
subdiretório:Aparte:
A terceira regra não está fazendo nada e deve ser removida. E as duas primeiras regras podem ser facilmente combinadas usando a alternância regex na extensão do arquivo. por exemplo.
(jpg|webp)
.