AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 1096330
Accepted
Totoro
Totoro
Asked: 2022-03-17 12:32:11 +0800 CST2022-03-17 12:32:11 +0800 CST 2022-03-17 12:32:11 +0800 CST

Tentando fazer com que o Apache sirva webp em vez de png/jpg (da pasta /img do prestashop)

  • 772

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:

  1. 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).
  2. Existem imagens webp correspondentes a jpg/png na pasta img.
  3. perms do arquivo de imagem está correto na pasta img e, de fato, em todas as coisas em public_html
  4. 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?

rewrite .htaccess extension mod-rewrite images
  • 1 1 respostas
  • 536 Views

1 respostas

  • Voted
  1. Best Answer
    MrWhite
    2022-03-17T15:10:21+08:002022-03-17T15:10:21+08:00
    RewriteRule ^/img/(.+)\.jpe?g$ /img/$1.webp [L]
    RewriteRule ^/img/(.+)\.png$ /img/$1.webp [L]
    

    Nos .htaccessarquivos, o caminho de URL com o qual o RewriteRule 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:

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

    No entanto...

    Na pasta img do prestashop, existe outro.htaccess

    Dependendo das diretivas contidas no /img/.htaccessarquivo, essas diretivas podem substituir completamente as diretivas mod_rewrite no .htaccessarquivo pai. As diretivas mod_rewrite no pai .htaccesspodem 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 .htaccessarquivo pai no que diz respeito à reescrita da solicitação nas .webpimagens.

    Como essas regras adicionais se aplicam apenas ao /imgsubdiretório e você já tem um .htaccessarquivo no /imgsubdiretório, você pode escrever essas regras no /img/.htaccessarquivo (é necessário um pequeno ajuste). Por exemplo:

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

    O RewriteRule padrão corresponde ao caminho de URL relativo ao diretório que contém o .htaccessarquivo. 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:

    # /.htaccess
    
    # Rewrite image request to ".webp" if supported and exists
    RewriteCond %{HTTP_ACCEPT} image/webp
    RewriteCond %{DOCUMENT_ROOT}/$1.webp -f
    RewriteRule ^(img/.+)\.(jpe?g|png)$ $1.webp [L,T=image/webp]
    

    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ê precisariaE=REQUEST_image ?)

    E se estiver usando o .htaccessarquivo no /imgsubdiretório:

    # /img/.htaccess
    
    # Rewrite image request to ".webp" if supported and exists
    RewriteCond %{HTTP_ACCEPT} image/webp
    RewriteCond %{DOCUMENT_ROOT}/img/$1.webp -f
    RewriteRule ^(.+)\.(jpe?g|png)$ $1.webp [L,T=image/webp]
    

    Aparte:

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

    • 0

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve