Объяснение фрагмента кода, отображение изображения в .htaccess - PullRequest
0 голосов
/ 23 января 2019

Я работаю над унаследованным сайтом и просматриваю файл .htaccess. По правде говоря, я действительно НЕ знаком с написанием пользовательских правил .htaccess, поэтому мне было интересно, может ли кто-нибудь объяснить мне, что происходит в этом фрагменте кода?

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTP_ACCEPT} image/webp
  RewriteCond %{DOCUMENT_ROOT}/$1.webp -f
  RewriteRule (.+)\.(jpe?g|png)$ $1.webp [T=image/webp,E=accept:1]
</IfModule>

После некоторого поиска в Google, я почти уверен, что он берет любое поданное изображение и возвращает с webp в конце вместо его исходного расширения?

Я полагаю, что код предназначен для дурака понимания скорости страниц, чтобы он не жаловался на обслуживание форматов изображений следующего поколения.

Мне просто интересно, может ли кто-нибудь дать мне полное представление о том, что именно происходит и как это работает?

Кроме того, я заметил, что когда я изменяю размеры изображений на сайте (в целях оптимизации), pagepeed не регистрирует изменения, в то время как этот код присутствует в htaccess, например, вносит свой вклад в некоторый тип кэша изображений ? Если я удалю этот фрагмент, pagepeed обнаружит новые оптимизированные изображения?

1 Ответ

0 голосов
/ 23 января 2019

Я уверен, что он берет любое изображение, которое подается и возвращается с webp в конце вместо его оригинального расширения?

В принципе, да.(Хотя это не «перенаправление».)

Более конкретно ... (при условии, что mod_rewrite включен - проверяется внешним контейнером <IfModule mod_rewrite.c>):

  1. RewriteRule (.+)\.(jpe?g|png)$- Для каждого URL-пути, который соответствует регулярному выражению (.+)\.(jpe?g|png)$.Другими словами, любой URL, который заканчивается на .jpg, .jpeg или .png.
  2. RewriteCond %{HTTP_ACCEPT} image/webp - И заголовок HTTP-запроса Accept содержит строку image/webp.Другими словами, пользовательский агент принимает изображения webp.
  3. RewriteCond %{DOCUMENT_ROOT}/$1.webp -f - и соответствующее изображение .webp существует в том же месте, что и запрошенный файл.например.Запрос /foo/bar/baz.jpg и /foo/bar/baz.webp существует.
  4. RewriteRule -------- $1.webp - Затем внутренне переписывает запрос к изображению .webp (например, foo/bar/baz.webp).Обратите внимание, что это не «перенаправление», пользовательский агент по-прежнему видит исходное имя .jpg (или .png).Также ...
    • T=image/webp - Устанавливает заголовок Content-Type в image/webp.(Переопределяя значение image/jpeg или image/png, которое в противном случае было бы отправлено.)
    • E=accept:1 - Устанавливает для переменной среды accept значение 1. (Это можно использоватьвашим приложением.)

Я полагаю, что целью кода является fool inspeed insights, чтобы он не жаловался на обслуживание следующего поколенияформаты изображений.

Я не думаю, что цель заключается в том, чтобы " fool inspeed insights".(Это большая работа, чтобы обмануть инструмент!)

Тем не менее, он допускает постепенное ухудшение ... a .jpg обслуживается по умолчанию и .webp подается, еслиПользовательский агент поддерживает его (и он существует!).

Кроме того, я заметил, что когда я изменяю размеры изображения на сайте (в целях оптимизации), pagepeed не регистрируетизменения, в то время как этот код присутствует в htaccess, например, вносит свой вклад в некоторый вид кэша изображенийЕсли я удалю этот фрагмент, pagepeed обнаружит новые оптимизированные изображения?

Регенерируете ли вы изображение .webp?

Этот код применяется только при запросе .jpg (или .png) изображения и соответствующее .webp изображение существует.Если вы не обновите изображение .webp (или оно не существовало изначально), то любой совместимый пользовательский агент не увидит изменения в вашем изображении.


В будущем ..когда все и все поддерживают .webp изображения, вы можете смело удалить две директивы RewriteCond (и относительно дорогую проверку файловой системы).И сохраните все ваши изображения как .webp (на вашем сайте нет изображений .jpg).Изображение URL все равно будет .jpg.Эти директивы позволяют вам обновлять изображения без необходимости изменять URL-адрес.

В этом случае вам также следует удалить оболочку <IfModule mod_rewrite.c>, поскольку ваш сайт теперь зависит , когда mod_rewrite делает свое дело,Оболочка <IfModule> должна использоваться, только если mod_rewrite необязательно , чтобы ваш сайт работал "нормально".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...