WordPressプラグイン「WebP Express」その3
WebPについての全投稿は/tag/WebPにあるので参照されたい
次に具体的にWebP expressが何をしているのかを見ていく。この項はWebP Expressの使用を中止した場合の確認に必要になる。なぜなら、主には、wordpressサイト中のそれぞれのjpg/pngに対するwebpバージョンが格納されているからだ。
webpバージョンの格納場所
例えばこの元のpng画像は、
「wp-content/uploads/2019/05/webp.png」という場所にあるのだが、このwebpバージョンは、「wp-content/webp-express/webp-images/doc-root/wp-content/uploads/2019/05/webp.png.webp」になっている。
つまり、「wp-content/webp-express」の下にサイト内のあらゆる画像のwebpバージョンをおいており、ファイル拡張子に.webpを追加しているというわけだ。
ただし、これは設定でデフォルト値の「Separate Folder」を選択した場合だ。
「Mingled」を選択すると、uploads以下のファイルについては「元画像と同じ場所」に置かれることになるというので注意。
ドキュメントにもあるように、この変換は「オンデマンド」で行われる。
Rewrite
さらにWebP Expressがwp-content/.htaccessに以下をつけ加えている。webpをサポートするブラウザからjpg/jpeg/pngの要求があれば、それをwebpバージョンにすり替えて返すということだ。
# BEGIN WebP Express
<IfModule mod_rewrite.c>
RewriteEngine On
# Redirect to existing converted image in cache-dir (if browser supports webp)
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{DOCUMENT_ROOT}/wp-content/webp-express/webp-images/doc-root/wp-content/$1.$2.webp -f
RewriteRule ^/?(.+)\.(jpe?g|png)$ /wp-content/webp-express/webp-images/doc-root/wp-content/$1.$2.webp [NC,T=image/webp,E=EXISTING:1,L]
# WebP Realizer: Redirect non-existing webp images to webp-realizer.php, which will locate corresponding jpg/png, convert it, and deliver the webp (if possible)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/?(.+)\.(webp)$ /wp-content/plugins/webp-express/wod/webp-realizer.php [E=DESTINATIONREL:wp-content/$0,E=WPCONTENT:wp-content,NC,L]
# Redirect images to webp-on-demand.php (if browser supports webp)
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{QUERY_STRING} (.*)
RewriteRule ^/?(.+)\.(jpe?g|png)$ /wp-content/plugins/webp-express/wod/webp-on-demand.php?%1 [E=REQFN:%{REQUEST_FILENAME},E=WPCONTENT:wp-content,NC,L]
<IfModule mod_headers.c>
<IfModule mod_setenvif.c>
# Set Vary:Accept header for the image types handled by WebP Express.
# The purpose is to make proxies and CDNs aware that the response varies with the Accept header.
SetEnvIf Request_URI "\.(jpe?g|png)" ADDVARY
Header append "Vary" "Accept" env=ADDVARY
# Set X-WebP-Express header for diagnose purposes
# Apache appends "REDIRECT_" in front of the environment variables defined in mod_rewrite, but LiteSpeed does not.
# So, the next line is for Apache, in order to set environment variables without "REDIRECT_"
SetEnvIf REDIRECT_EXISTING 1 EXISTING=1
Header set "X-WebP-Express" "Redirected directly to existing webp" env=EXISTING
</IfModule>
</IfModule>
</IfModule>
<IfModule mod_mime.c>
AddType image/webp .webp
</IfModule>
# END WebP Express