
Estou tentando reescrever todos os arquivos do site ( *.jpg|*.gif|*.png
) *.webp
em um subdiretório, mas somente quando o *.webp
arquivo existir. Os arquivos anteriores e novos têm o mesmo nome, apenas alterando a extensão e *.webp
os arquivos estão todos no subdiretório do original.
Estou lutando com o htaccess para fazer o trabalho. As regras básicas são:
- Corresponde apenas a arquivos PNG/JPG/GIF
- 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
- O novo
*.webp
diretório é o padrão:/site/views/00_projects/[VARIABLE DIR NAME HERE]/content/image/[VARIABLE SUBDIR NAME HERE]/webp/*.webp
- 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 Accept
cabeçalho da solicitação HTTP para image/webp
).
Tente o seguinte próximo ao topo do .htaccess
arquivo 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 nopng
jpg
gif
$1
$2
RewriteRule
substituiçãocorda).
O primeirodoença( RewriteCond
diretiva) que verifica a HTTP_ACCEPT
variá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/webp
sinalizador é necessário para enviar o tipo MIME ( Content-Type
cabeçalho) correto de volta ao cliente.