htaccess переписать /dir/*.jpg в /dir/webp/*.webp только если файл webp существует

htaccess переписать /dir/*.jpg в /dir/webp/*.webp только если файл webp существует

Я пытаюсь переписать все файлы веб-сайта ( *.jpg|*.gif|*.png) *.webpв подкаталог, но только когда *.webpфайл существует. Предыдущий и новый файлы имеют одинаковое имя, меняется только расширение, и *.webpвсе файлы находятся в подкаталоге исходного.

Я борюсь с htaccess, чтобы сделать эту работу. Основные правила:

  1. Соответствует только файлам PNG/JPG/GIF
  2. Исходный шаблон каталога изображений:/site/views/00_projects/[VARIABLE MAIN DIR NAME HERE]/content/image/[VARIABLE SUBDIR NAME HERE]/*.jpg
  3. Новый *.webpшаблон dir:/site/views/00_projects/[VARIABLE DIR NAME HERE]/content/image/[VARIABLE SUBDIR NAME HERE]/webp/*.webp
  4. Перезаписать только ЕСЛИ существует файл webp

Я действительно не имею ни малейшего представления, как это сделать. Может кто-нибудь помочь?

решение1

Строго говоря, вам также необходимо убедиться, что пользовательский агент, отправляющий запрос, поддерживает изображения WEBP (т. е. проверить Acceptзаголовок HTTP-запроса на наличие image/webp).

Попробуйте выполнить следующее в верхней части корневого .htaccessфайла:

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]

TheRewriteRule шаблон(т.е. ^(site/views/00_projects/[^/]+/content/image/[^/]+)/([^/]+)\.(?:png|jpg|gif)$) соответствует запрошенному png, jpgили gifизображению и сохраняет URL-путь в $1обратной ссылке и имя файла в $2обратной ссылке (используется позже вRewriteRule заменанить).

Первыйсостояние( RewriteCondдиректива), которая проверяет HTTP_ACCEPTпеременную сервера, проверяет, поддерживает ли пользовательский агент изображения WEBP.

Второйсостояниепроверяет существование целевого изображения WebP.

Флаг T=image/webpнеобходим для отправки правильного MIME-типа ( Content-Typeзаголовка) обратно клиенту.

Связанный контент