仅当.webp文件存在时,如何使用.htaccess显示.webp图像?

时间:2019-04-04 16:07:50

标签: .htaccess mod-rewrite webp

我正试图在我的网站上显示webp文件,以使其加载更快。我正在使用.htaccess重写所有图像,以.wepb结尾,并且一切都像一个超级按钮。不幸的是,我不是网站上唯一的开发人员,我们还有一个博客,人们可以在其中添加图片。

问题在于,每个没有以Webp格式复制该图像的新图像都不会显示为jpg或其他任何东西,而只是被破坏了。

我研究了网络,找到了多个可以尝试的脚本,但没有一个可以正常运行。仅在htaccess中可能无法执行此操作。

我认为正在发生的事情是我的脚本正在查看浏览器是否支持webp,以及文件是否存在,但是一旦一个图像的条件为true,它将跳过所有其他请求的rewriteCond。 >

我们如何使它持久化?

我正在使用Laravel框架,所以也许我可以使用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.webp是否存在,然后显示* .jpg.webp或仅显示.jpg

它有效!但是,当人们向我的网站添加不具有thatimg.jpg.webp的新img时,它不会显示简单的thatimg.jpg,它将尝试显示不存在的img.jpg.webp。

如何告诉它为页面上的每个图像运行if语句?

0 个答案:

没有答案