
Я пытаюсь переписать все файлы веб-сайта ( *.jpg|*.gif|*.png
) *.webp
в подкаталог, но только когда *.webp
файл существует. Предыдущий и новый файлы имеют одинаковое имя, меняется только расширение, и *.webp
все файлы находятся в подкаталоге исходного.
Я борюсь с htaccess, чтобы сделать эту работу. Основные правила:
- Соответствует только файлам PNG/JPG/GIF
- Исходный шаблон каталога изображений:
/site/views/00_projects/[VARIABLE MAIN DIR NAME HERE]/content/image/[VARIABLE SUBDIR NAME HERE]/*.jpg
- Новый
*.webp
шаблон dir:/site/views/00_projects/[VARIABLE DIR NAME HERE]/content/image/[VARIABLE SUBDIR NAME HERE]/webp/*.webp
- Перезаписать только ЕСЛИ существует файл 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
заголовка) обратно клиенту.