WebP 画像を提供するために、ファイルの存在と WebP 画像のサポートを確認する nginx の書き換えルールを使用します。OPがmod_negotiationについて言及したので、Apache mod_rewriteに移植しました。書き換えは、「chrome」という単語を含むユーザー エージェントを探し、.jpg または .png ファイルと同じ名前とパスを持つ .webp 拡張子を持つファイルをチェックし、そうであれば WebP ファイルを提供します。書き換えルールは少し厄介ですが、仕事は完了します。
AddType image/webp .webp
# strip the extension off of all JPGs
RewriteCond %{HTTP_USER_AGENT} (chrome) [NC]
RewriteRule (.*)\.jpg$ $1
#check for a webp file, if so serve it
RewriteCond %{REQUEST_FILENAME}.webp -f
RewriteRule (.*) $1.webp [E=WEBP:1]
#check for if we did not have a webp file and we do have a jpg, if so serve it
RewriteCond %{REQUEST_FILENAME}.jpg -f
RewriteCond %{REQUEST_FILENAME}.webp !-f
RewriteRule (.*) $1.jpg
# strip the extension off of all PNGs
RewriteCond %{HTTP_USER_AGENT} (chrome) [NC]
RewriteRule (.*)\.png$ $1
#check for a webp file, if so serve it
RewriteCond %{REQUEST_FILENAME}.webp -f
RewriteRule (.*) $1.webp [E=WEBP:1]
#check for if we did not have a webp file and we do have a png, if so serve it
RewriteCond %{REQUEST_FILENAME}.png -f
RewriteCond %{REQUEST_FILENAME}.webp !-f
RewriteRule (.*) $1.png
私のサイトでは、ユーザー エージェント文字列に依存する代わりに、ブラウザーで WebP のサポートを検出できた後、JavaScript を介して写真を読み込むことができるという贅沢があります。WebP サポートが存在する場合は、画像の読み込みを開始する前に Cookie を設定します。したがって、この RewriteCond の代わりに
RewriteCond %{HTTP_USER_AGENT} (chrome) [NC]
私はこれを使用します
RewriteCond %{HTTP_COOKIE} supports_webp