次のように htaccess ファイルを設定しています。
<IfModule mod_rewrite.c>
RewriteEngine On
# check if browser accepts webp
RewriteCond %{HTTP_ACCEPT} image/webp
# check if file is jpg or png
RewriteCond %{REQUEST_FILENAME} (.*)\.(jpe?g|png)$
# check if corresponding webp file exists image.png -> image.webp
RewriteCond %1\.webp -f
# serve up webp instead
RewriteRule (.+)\.(jpe?g|png)$ $1.webp [T=image/webp,E=accept:1]
</IfModule>
<IfModule mod_headers.c>
Header append Vary Accept env=REDIRECT_accept
</IfModule>
AddType image/webp .webp
これはテストディレクトリで非常にうまく機能し、存在する場合は webp 画像を表示します。ただし、同じ .htaccess ルールを WordPress の pretty permalinks rewrite ルールと組み合わせて使用しようとすると、ルールが破られます。
これは WordPress のデフォルト ルールです (サブディレクトリの名前が DPA の場合)
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /DPA/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /DPA/index.php [L]
</IfModule>
jpg ファイルに直接アクセスしようとすると、サーバーで次のエラーが発生します。
The requested URL /wp-content/themes/dpa/assets/img/home-page/sliders/strategy-1650.webp was not found on this server.
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
これは、WordPress がルートでファイルを検索し、画像ファイルの実際の場所をめちゃくちゃにするためだと思います。
2 つのルールを相互に互換性のあるものにするために、apache で十分に書き換えルールを知っている人はいますか?
ありがとう!
パトリック