Рейтинг:3

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

флаг cn

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

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

  1. Соответствует только файлам PNG/JPG/GIF
  2. Исходный шаблон изображения: /site/views/00_projects/[ЗДЕСЬ ПЕРЕМЕННОЕ НАЗВАНИЕ ГЛАВНОГО КАТАЛОГА]/content/image/[ЗДЕСЬ ПЕРЕМЕННОЕ ИМЯ ПОДКАТА]/*.jpg
  3. Новый *.вебп директор это шаблон: /site/views/00_projects/[ЗДЕСЬ ИМЯ ПЕРЕМЕННОГО КАТАЛОГА]/content/image/[ЗДЕСЬ ИМЯ ПЕРЕМЕННОГО ПОДКАТА]/webp/*.webp
  4. Только переписать, если файл webp существует

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

Рейтинг:4
флаг kz

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

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

RewriteEngine включен

# Перезаписать изображения в WebP, если они существуют
RewriteCond %{HTTP_ACCEPT} изображение/webp
RewriteCond %{DOCUMENT_ROOT}/$1/webp/$2.webp -f
RewriteRule ^(site/views/00_projects/[^/]+/content/image/[^/]+)/([^/]+)\.(?:png|jpg|gif)$ $1/webp/$2 .webp [T=изображение/webp,L]

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

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

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

T=изображение/веб-страница флаг необходим для отправки правильного MIME-типа (Тип содержимого заголовок) обратно клиенту.

флаг cn
Работает как шарм, СПАСИБО БОЛЬШОЕ! Один маленький вопрос: с этим кодом URL-адрес сохраняет исходный путь к файлу (с *.jpg, т.е.); что ему нужно будет перенаправить на URL-адрес * .webp, если он существует и браузер его поддерживает?
флаг kz
@DiegoFlores Пожалуйста. Для _постоянного_ "перенаправления" вы должны добавить флаг `R=301` к директиве `RewriteRule`, и тогда вам не понадобится флаг `T`. т.е. `[R=301,L]`. Тем не менее, как правило, вам следует избегать внешнего перенаправления, если это несколько изображений на странице, поскольку это потенциально замедляет работу ваших пользователей (плохо для SEO) и удваивает количество запросов, поступающих на ваш сервер, заполняя ваши журналы массами 301 для того, что является «нормальным». Запросы. Если вы ссылаетесь на файлы `.jpg` и т. д., сохраните их как внутреннюю перезаписи, в противном случае измените URL-адреса, на которые вы ссылаетесь.
флаг cn
Еще раз спасибо! Я буду иметь это в виду! Мне просто интересно, будет ли Google читать правильный Content-Type или только URL-адрес файла с первым решением при оценке SEO/PageSpeed ​​​​и т. д. ;-) В любом случае, вы спасли день
флаг kz
@DiegoFlores Да, Google будет читать «правильный Content-Type» - это цель флага «T». Оканчивается ли "URL" на `.jpg` (или что-то еще) не имеет значения - это не URL, который определяет MIME-тип.
флаг kz
@DiegoFlores Если это ответило на ваш вопрос, отметьте его как «принятый», щелкнув галочку рядом с ответом под стрелками голосования (чтобы помочь другим читателям). Спасибо, очень признателен. :)

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.