Рейтинг:1

Попытка заставить Apache обслуживать webp вместо png/jpg (из папки /img prestashop)

флаг cn

Первый пост здесь, так что я надеюсь, что я сделал это хорошо.

Я преобразовал все png/jpg, начиная с моей папки public_html prestashop, в webp и добавил правила перезаписи в .htaccess, чтобы использовать webp вместо png/jpg.

Я основывал свои переписывания на уже существующих переписываниях prestashop. Где у меня было:
Правило перезаписи ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/ р/$1/$1$2$3.jpg [L]
В итоге я сделал:

Правило перезаписи ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/ p/$1/$1$2$3.webp [L]
RewriteRule ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.webp$ %{ENV:REWRITEBASE}img/ p/$1/$1$2$3.webp [L]
Правило перезаписи ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/ р/$1/$1$2$3.jpg [L]

Что работает: я получил URL-адрес jpg, обслуживающий веб-изображения, пока все хорошо (я знаю, что все еще нужно реализовать

#RewriteCond %{HTTP_ACCEPT} изображение/веб-страница
#RewriteCond %{DOCUMENT_ROOT}/$1.webp -f

а также попытаться выяснить, должен ли я уйти [Л] или сделать [L,T=изображение/веб-страница] или сделать [T=изображение/webp,E=REQUEST_image], поэтому я читаю документацию, связанную с apache, и просматриваю веб-страницы о темах, связанных с переписыванием, которые действительно огромны.

Итак, вернемся к основной теме. Я увидел, что мне не хватает перезаписи webp для изображений, которые prestashop хранит в папке public_html/img.

Затем я попробовал следующее (и другие варианты):

Правило перезаписи ^/img/(.+)\.jpe?g$ /img/$1.webp [L]
Правило перезаписи ^/img/(.+)\.png$ /img/$1.webp [L]

^--- НЕ ОК... по-прежнему обслуживает изображения типа jpg/png из каталога img (дважды проверил тип MIME).

Обратите внимание, что:

  1. Каждый раз, когда я менял .htaccess и пробовал решение, я на всякий случай очищал кеш prestashop (несмотря на то, что знал, что .htaccess читается при каждом запросе).
  2. изображения webp, соответствующие jpg/png в папке img, существуют.
  3. Права доступа к файлу изображения верны в папке img и вообще во всех материалах в public_html
  4. В папке img в prestashop есть еще один .htaccess, который ограничивает тип файлов, которые можно обслуживать из этой папки, и я добавил уже webp, на всякий случай, если кто-то спросит.

ОБНОВИТЬ: По просьбе MrWhite добавление .htaccess папки img

<IfModule mod_php5.c>
    php_flag engine off
</IfModule>

# Apache 2.2
<IfModule !mod_authz_core.c>
    Order deny,allow
    Deny from all
    <Files ~ "(?i)^.*\.(webp|jpg|jpeg|gif|png|bmp|tiff|svg|pdf|mov|mpeg|mp4|avi|mpg|wma|flv|webm|ico)$">
        Allow from all
    </Files>
</IfModule>

# Apache 2.4
<IfModule mod_authz_core.c>
    Require all denied
    <Files ~ "(?i)^.*\.(webp|jpg|jpeg|gif|png|bmp|tiff|svg|pdf|mov|mpeg|mp4|avi|mpg|wma|flv|webm|ico)$">
        Require all granted
    </Files>
</IfModule>

Пожалуйста, не могли бы вы, ребята, помочь мне здесь?

флаг kz
«В папке img в prestashop есть еще один файл .htaccess». Пожалуйста, отредактируйте свой вопрос, включив в него содержимое этого файла `.htaccess`.
Рейтинг:0
флаг kz
Правило перезаписи ^/img/(.+)\.jpe?g$ /img/$1.webp [L]
Правило перезаписи ^/img/(.+)\.png$ /img/$1.webp [L]

В .htaccess файлы, URL-путь, по которому Правило перезаписи шаблон соответствует, не начинается с косой черты. Таким образом, приведенные выше директивы никогда не будут соответствовать запрошенному URL-адресу, поэтому ничего не сделают.В ваших более ранних правилах вы сопоставляете цифру в качестве первого символа, а не косую черту.

Например, это должно быть:

Правило перезаписи ^img/(.+)\.jpe?g$ /img/$1.webp [L]

Однако...

В папке img в prestashop есть еще один .htaccess

В зависимости от указаний, содержащихся в /img/.htaccess файл, то эти директивы могут полностью переопределить директивы mod_rewrite в родительском .htaccess файл. Директивы mod_rewrite в родительском .htaccess может даже не обрабатываться.

ОБНОВИТЬ: Теперь, увидев /img/.htaccess файл, то все в порядке - эти директивы не будут выше директив в родительском .htaccess файл о переписывании запроса на .webp картинки.

Поскольку эти дополнительные правила применяются только к / изображение подкаталог, и у вас уже есть .htaccess файл в / изображение подкаталог, то вы можете написать эти правила в /img/.htaccess вместо файла (требуется небольшая корректировка). Например:

# /img/.htaccess

RewriteEngine включен

Правило перезаписи ^(.+)\.jpe?g$ $1.webp [L]

Правило перезаписи шаблон соответствует URL-пути родственник в каталог, содержащий .htaccess файл. Таким образом, в данном случае он не соответствует / изображение подкаталог.


Чтобы завершить правило и включить другие условия, которые вы упомянули, вы можете сделать следующее. Теперь вернемся в корень .htaccess файл:

# /.htaccess

# Переписать запрос изображения в ".webp", если он поддерживается и существует
RewriteCond %{HTTP_ACCEPT} изображение/webp
RewriteCond %{DOCUMENT_ROOT}/$1.webp -f
Правило перезаписи ^(img/.+)\.(jpe?g|png)$ $1.webp [L,T=image/webp]

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

(Я не уверен, зачем вам нужно E=REQUEST_image?)

А если использовать .htaccess файл в / изображение подкаталог:

# /img/.htaccess

# Переписать запрос изображения в ".webp", если он поддерживается и существует
RewriteCond %{HTTP_ACCEPT} изображение/webp
RewriteCond %{DOCUMENT_ROOT}/img/$1.webp -f
Правило перезаписи ^(.+)\.(jpe?g|png)$ $1.webp [L,T=image/webp]

В стороне:

Правило перезаписи ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/ p/$1/$1$2$3.webp [L]
RewriteRule ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.webp$ %{ENV:REWRITEBASE}img/ p/$1/$1$2$3.webp [L]
Правило перезаписи ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/ р/$1/$1$2$3.jpg [L]

Третье правило ничего не делает и должно быть удалено. И первые два правила можно легко комбинировать, используя чередование регулярных выражений в расширении файла. например. (jpg|webp).

флаг cn
Это работает (я выбрал предложенный вами подход "in img/".htaccess). Спасибо большое за предложенные решения и исчерпывающие пояснения! И да, прежде чем я получил ответ, тем временем я попробовал регулярное выражение в этой сети [ссылка] (https://htaccess.madewithlove.com/) и обнаружил, что мне нужно удалить косую черту заголовка, чтобы получить совпадение. Тем не менее, благодаря вам, я понял это и многое другое.
флаг cn
По поводу вашего комментария о "3-й строке": Это присутствовало в .htaccess по умолчанию, сгенерированном prestashop, и я думаю, что оно использовалось для получения «дружественного URL».
флаг kz
@ Тоторо Хорошо, вполне возможно. Однако в вашем "новом" трио правил ваше первое правило сначала перезапишет запрос `.jpg` в `.webp`, поэтому третье правило никогда не обрабатывается.Если, однако, вы добавите упомянутые _условия_ к первому правилу, то 3-е правило будет иметь назначение как «еще» предложение, когда (если) первое правило не сработает.
флаг cn
Еще раз спасибо @MrWhite за исчерпывающее объяснение (еще раз) :)!

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

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