htaccess reescrever /dir/*.jpg para /dir/webp/*.webp somente quando o arquivo webp existir

htaccess reescrever /dir/*.jpg para /dir/webp/*.webp somente quando o arquivo webp existir

Estou tentando reescrever todos os arquivos do site ( *.jpg|*.gif|*.png) *.webpem um subdiretório, mas somente quando o *.webparquivo existir. Os arquivos anteriores e novos têm o mesmo nome, apenas alterando a extensão e *.webpos arquivos estão todos no subdiretório do original.

Estou lutando com o htaccess para fazer o trabalho. As regras básicas são:

  1. Corresponde apenas a arquivos PNG/JPG/GIF
  2. O padrão do diretório de imagens originais é:/site/views/00_projects/[VARIABLE MAIN DIR NAME HERE]/content/image/[VARIABLE SUBDIR NAME HERE]/*.jpg
  3. O novo *.webpdiretório é o padrão:/site/views/00_projects/[VARIABLE DIR NAME HERE]/content/image/[VARIABLE SUBDIR NAME HERE]/webp/*.webp
  4. Reescreva apenas se o arquivo webp existir

Eu realmente não tenho ideia de como fazer isso funcionar. Alguém pode ajudar?

Responder1

Estritamente falando, você também precisa ter certeza de que o agente do usuário que faz a solicitação suporta imagens WEBP (ou seja, verifique o Acceptcabeçalho da solicitação HTTP para image/webp).

Tente o seguinte próximo ao topo do .htaccessarquivo raiz:

RewriteEngine On

# Rewrite images to WebP if they exist
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteCond %{DOCUMENT_ROOT}/$1/webp/$2.webp -f
RewriteRule ^(site/views/00_projects/[^/]+/content/image/[^/]+)/([^/]+)\.(?:png|jpg|gif)$ $1/webp/$2.webp [T=image/webp,L]

ORewriteRule padrão(ou seja, ) ^(site/views/00_projects/[^/]+/content/image/[^/]+)/([^/]+)\.(?:png|jpg|gif)$corresponde à imagem ou solicitada e salva o caminho da URL na referência anterior e o nome do arquivo na referência anterior (usado posteriormente nopngjpggif$1$2RewriteRule substituiçãocorda).

O primeirodoença( RewriteConddiretiva) que verifica a HTTP_ACCEPTvariável do servidor, verifica se o agente do usuário suporta imagens WEBP.

O segundodoençaverifica se a imagem webp de destino existe.

O T=image/webpsinalizador é necessário para enviar o tipo MIME ( Content-Typecabeçalho) correto de volta ao cliente.

informação relacionada