htaccess は、webp ファイルが存在する場合にのみ、/dir/*.jpg を /dir/webp/*.webp に書き換えます。

htaccess は、webp ファイルが存在する場合にのみ、/dir/*.jpg を /dir/webp/*.webp に書き換えます。

*.jpg|*.gif|*.pngすべての Web サイト ファイル ( ) を*.webpサブディレクトリに書き換えようとしていますが*.webp、ファイルが存在する場合のみです。以前のファイルと新しいファイルの名前は同じで、拡張子のみが変更され、*.webpファイルはすべて元のファイルのサブディレクトリの下にあります。

私は htaccess を使って仕事をするのに苦労しています。基本的なルールは次のとおりです。

  1. PNG/JPG/GIFファイルのみに一致します
  2. 元の画像の dir パターンは次のとおりです。/site/views/00_projects/[VARIABLE MAIN DIR NAME HERE]/content/image/[VARIABLE SUBDIR NAME HERE]/*.jpg
  3. 新しい*.webpディレクトリのパターンは次のとおりです:/site/views/00_projects/[VARIABLE DIR NAME HERE]/content/image/[VARIABLE SUBDIR NAME HERE]/webp/*.webp
  4. webpファイルが存在する場合にのみ書き換える

どうすればうまくいくのか全く分かりません。誰か助けてくれませんか?

答え1

厳密に言えば、リクエストを行うユーザーエージェントが WEBP 画像をサポートしていることも確認する必要があります (つまり、AcceptHTTP リクエスト ヘッダーを確認しますimage/webp)。

ルート ファイルの先頭付近で次のコードを試してください.htaccess

RewriteEngine On

# Rewrite images to WebP if they exist
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteCond %{DOCUMENT_ROOT}/$1/webp/$2.webp -f
RewriteRule ^(site/views/00_projects/[^/]+/content/image/[^/]+)/([^/]+)\.(?:png|jpg|gif)$ $1/webp/$2.webp [T=image/webp,L]

RewriteRule パターン(つまり^(site/views/00_projects/[^/]+/content/image/[^/]+)/([^/]+)\.(?:png|jpg|gif)$)は要求されたpngjpgまたはgif画像と一致し、URLパスを$1バックリファレンスに保存し、ファイル名を$2バックリファレンスに保存します(後でRewriteRule 代替弦)。

最初状態(RewriteCondディレクティブ) は、サーバー変数をチェックしHTTP_ACCEPT、ユーザーエージェントが WEBP 画像をサポートしているかどうかをチェックします。

二番目状態対象の webp イメージが存在するかどうかを確認します。

このT=image/webpフラグは、正しい MIME タイプ (Content-Typeヘッダー) をクライアントに送り返すために必要です。

関連情報