Make LiteSpeed Cache for WordPress and QUIC.cloud save a separate mobile cache
LiteSpeed Cache coupled with QUIC.cloud is an excellent way to serve fast-loading WordPress sites. Here's a work around for a small bug with Apache.
Maple's Tech Blog
| Published:
Bit of a mouthful of a title this time, but there’s no easy way to summarise it!
I’ve been working with an older WooCommerce website this week, which serves a different template to mobile devices rather than using a responsive design.
The LiteSpeed Cache plugin for WordPress has a setting to cache separate versions, but it wasn’t working with QUIC.cloud if your hosting is running a non-LiteSpeed webserver (Apache in our case).
Talking with LiteSpeed they confirmed this is a bug which will be fixed, but it needs changes to be made to both the CDN and the plugin. As I needed it now, I wrote a quick work-around. Add the following code to the top of your wp-config.php
file and you’ll get a separate mobile version cached for every page.
if (isset($_SERVER['HTTP_X_LSCACHE']) && strpos($_SERVER['HTTP_X_LSCACHE'], 'on') !== false) {
// Inlining wp_is_mobile() since it's not loaded yet
if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) {
$is_mobile = false;
} elseif ( strpos( $_SERVER['HTTP_USER_AGENT'], 'Mobile' ) !== false // Many mobile devices (all iPhone, iPad, etc.)
|| strpos( $_SERVER['HTTP_USER_AGENT'], 'Android' ) !== false
|| strpos( $_SERVER['HTTP_USER_AGENT'], 'Silk/' ) !== false
|| strpos( $_SERVER['HTTP_USER_AGENT'], 'Kindle' ) !== false
|| strpos( $_SERVER['HTTP_USER_AGENT'], 'BlackBerry' ) !== false
|| strpos( $_SERVER['HTTP_USER_AGENT'], 'Opera Mini' ) !== false
|| strpos( $_SERVER['HTTP_USER_AGENT'], 'Opera Mobi' ) !== false ) {
$is_mobile = true;
} else {
$is_mobile = false;
}
if ($is_mobile) {
$_SERVER['HTTP_X_LSCACHE_VARY'] = 'ismobile';
$_SERVER['LSCACHE_VARY_VALUE'] = 'ismobile';
}
}