我正试图在我的网站上显示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语句?