Как использовать .htaccess для отображения изображений .webp ТОЛЬКО при наличии файла .webp? - PullRequest
0 голосов
/ 04 апреля 2019

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

Проблема в том, что каждое новое изображение, у которого нет копии этого изображения в формате webp, неотображается как jpg или что-то еще, он просто сломан.

Я исследовал сеть, чтобы найти несколько сценариев, чтобы попробовать, но ни один из них не работает так, как мне бы этого хотелось.Это может быть невозможно сделать только в htaccess.

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

Как нам сделать это постоянным?

Я использую Laravel Framework, так что, возможно, я смогу решить эту проблему с php.

Apache 2.4.37 php 7.1.26 (работает на wamp-сервере для тестирования)

<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteBase /

 # Does browser explicitly support webp?
 RewriteCond %{HTTP_USER_AGENT} Chrome [OR]

 # OR Is request from Page Speed
 RewriteCond %{HTTP_USER_AGENT} "Google Page Speed Insights" [OR]

 # OR does this browser explicitly support webp
 RewriteCond %{HTTP_ACCEPT} image/webp [OR]

 # AND does a webp image exists?
 RewriteCond %{DOCUMENT_ROOT}/$1\.webp -f

 # THEN send the webp image and set the env var webp
 RewriteRule (.+\.(?:jpe?g|png))$ $1.webp [NC,L]

</IfModule>

 <IfModule mod_mime.c>
   AddType image/webp .webp
 </IfModule>

<IfModule mod_rewrite.c>
     RewriteEngine On
    RewriteCond %{HTTP} off

    RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    RewriteRule ^(.*)$ public/$1 [L]
    ## LEVERAGE BROWSER CACHING ##
ExpiresActive On
ExpiresByType image/jpg "access 1 week"
ExpiresByType image/jpeg "access 1 week"
ExpiresByType image/gif "access 1 week"
ExpiresByType image/png "access 1 week"
ExpiresByType text/css "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType application/x-javascript "access 1 month"
ExpiresByType application/javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 month"
ExpiresDefault "access 1 week"
## LEVERAGE BROWSER CACHING ##

    AddType image/svg+xml svg
    AddType image/svg+xml svgz

</IfModule>

Код говорит: проверьте, поддерживает ли chrome или speed insight или поддерживает браузер И проверяет ли файл imgexemple.jpg.Веб-сайт существует, затем отобразите * .jpg.webp или просто .jpg

ЭТО работает!Но когда люди добавляют новый img на мой сайт, на котором нет thatimg.jpg.webp, он не будет отображать простой файл thatimg.jpg, который попытается показать thatimg.jpg.webp, которого не существует.

Как мне сказать, чтобы он выполнял оператор if для КАЖДОГО изображения на странице?

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