
Estoy intentando reescribir todos los archivos del sitio web ( *.jpg|*.gif|*.png
) *.webp
en un subdirectorio, pero solo cuando el *.webp
archivo existe. Los archivos anteriores y nuevos tienen el mismo nombre, solo se cambia la extensión y *.webp
los archivos están todos bajo el subdirectorio del original.
Estoy luchando con htaccess para hacer el trabajo. Las reglas básicas son:
- Sólo coincide con el archivo PNG/JPG/GIF
- El patrón del directorio de imágenes originales es:
/site/views/00_projects/[VARIABLE MAIN DIR NAME HERE]/content/image/[VARIABLE SUBDIR NAME HERE]/*.jpg
- El nuevo
*.webp
directorio es el patrón:/site/views/00_projects/[VARIABLE DIR NAME HERE]/content/image/[VARIABLE SUBDIR NAME HERE]/webp/*.webp
- Sólo reescribe SI existe el archivo webp
Realmente no tengo idea de cómo hacerlo funcionar. ¿Alguien puede ayudar?
Respuesta1
Estrictamente hablando, también debe asegurarse de que el agente de usuario que realiza la solicitud admita imágenes WEBP (es decir, verifique el Accept
encabezado de la solicitud HTTP image/webp
).
Pruebe lo siguiente cerca de la parte superior del .htaccess
archivo raíz:
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]
ElRewriteRule
patrón(es decir, ) coincide con la imagen o el archivo ^(site/views/00_projects/[^/]+/content/image/[^/]+)/([^/]+)\.(?:png|jpg|gif)$
solicitado y guarda la ruta URL en la referencia anterior y el nombre del archivo en la referencia anterior (utilizado más adelante en elpng
jpg
gif
$1
$2
RewriteRule
sustitucióncadena).
La primeracondición( RewriteCond
directiva) que compara con la HTTP_ACCEPT
variable del servidor, verifica que el agente de usuario admita imágenes WEBP.
El segundocondicióncomprueba que la imagen webp de destino existe.
La T=image/webp
bandera es necesaria para enviar el tipo MIME correcto ( Content-Type
encabezado) al cliente.