
*.jpg|*.gif|*.png
すべての Web サイト ファイル ( ) を*.webp
サブディレクトリに書き換えようとしていますが*.webp
、ファイルが存在する場合のみです。以前のファイルと新しいファイルの名前は同じで、拡張子のみが変更され、*.webp
ファイルはすべて元のファイルのサブディレクトリの下にあります。
私は htaccess を使って仕事をするのに苦労しています。基本的なルールは次のとおりです。
- PNG/JPG/GIFファイルのみに一致します
- 元の画像の dir パターンは次のとおりです。
/site/views/00_projects/[VARIABLE MAIN DIR NAME HERE]/content/image/[VARIABLE SUBDIR NAME HERE]/*.jpg
- 新しい
*.webp
ディレクトリのパターンは次のとおりです:/site/views/00_projects/[VARIABLE DIR NAME HERE]/content/image/[VARIABLE SUBDIR NAME HERE]/webp/*.webp
- webpファイルが存在する場合にのみ書き換える
どうすればうまくいくのか全く分かりません。誰か助けてくれませんか?
答え1
厳密に言えば、リクエストを行うユーザーエージェントが WEBP 画像をサポートしていることも確認する必要があります (つまり、Accept
HTTP リクエスト ヘッダーを確認します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)$
)は要求されたpng
、jpg
またはgif
画像と一致し、URLパスを$1
バックリファレンスに保存し、ファイル名を$2
バックリファレンスに保存します(後でRewriteRule
代替弦)。
最初状態(RewriteCond
ディレクティブ) は、サーバー変数をチェックしHTTP_ACCEPT
、ユーザーエージェントが WEBP 画像をサポートしているかどうかをチェックします。
二番目状態対象の webp イメージが存在するかどうかを確認します。
このT=image/webp
フラグは、正しい MIME タイプ (Content-Type
ヘッダー) をクライアントに送り返すために必要です。