• My website can be accessed using http and https as well. I also have a content filter which takes care that all internal links will either use “https://” or “https://” to avoid problems with mixed protocols.

    Unfortunately, Cachify does not include the protocol for the cache, so when a user accesses the site using http the cached version will have “https://” in all links. If another user visits the same URL later using https, he will get the cached version with “https://” links, which will break a lot of things.

    Therefore I extended Cachify to use an additional prefix for the cache folder so different versions for http and https are cached separately and can easily be used in Apache rewrite rules as well (I don’t use NGinx, but it should be possible there as well).

    1) In inc/cachify.class.php

    private static function _cache_hash($url = '')
    	if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on') $prefix='443-';
    	else $prefix='80-';
    	return md5(
    		empty($url) ? ( $prefix . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] ) : ( $prefix . parse_url($url, PHP_URL_HOST) . parse_url($url, PHP_URL_PATH) )
    	) . '.cachify';
    }

    2) In inc/cachify_hdd.class.php

    private static function _file_path($path = NULL)
    {
    	if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on') $prefix='443-';
    	else $prefix='80-';
    
    	$path = sprintf(
    		'%s%s%s%s%s',
    		CACHIFY_CACHE_DIR,
    		DIRECTORY_SEPARATOR,
    		$prefix,
    		parse_url(
    			'https://' . strtolower($_SERVER['HTTP_HOST']),
    			PHP_URL_HOST
    		),
    		parse_url(
    			( $path ? $path : $_SERVER['REQUEST_URI'] ),
    			PHP_URL_PATH
    		)
    	);
    
    	if ( validate_file($path) > 0 ) {
    		wp_die('Invalide file path.');
    	}
    
    	return trailingslashit($path);
    }

    3) Apache rewrite rules to send the cached content if available

    RewriteEngine On
    
    # GZIP FILE
    <IfModule mod_mime.c>
    RewriteCond %{REQUEST_URI} !^/wp-admin/.*
    RewriteCond %{REQUEST_METHOD} !=POST
    RewriteCond %{QUERY_STRING} =""
    RewriteCond %{HTTP_COOKIE} !(wp-postpass|wordpress_logged_in|comment_author)_
    RewriteCond %{HTTP:Accept-Encoding} gzip
    RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/cachify/%{SERVER_PORT}-%{HTTP_HOST}/%{REQUEST_URI}/index.html.gz -f
    RewriteRule ^(.*) /wp-content/cache/cachify/%{SERVER_PORT}-%{HTTP_HOST}%{REQUEST_URI}/index.html.gz [L]
    
    AddType text/html .gz
    AddEncoding gzip .gz
    </IfModule>
    
    # HTML FILE
    RewriteCond %{REQUEST_URI} !^/wp-admin/.*
    RewriteCond %{REQUEST_METHOD} !=POST
    RewriteCond %{QUERY_STRING} =""
    RewriteCond %{HTTP_COOKIE} !(wp-postpass|wordpress_logged_in|comment_author)_
    RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/cachify/%{SERVER_PORT}-%{HTTP_HOST}/%{REQUEST_URI}/index.html -f
    RewriteRule ^(.*) /wp-content/cache/cachify/%{SERVER_PORT}-%{HTTP_HOST}%{REQUEST_URI}/index.html [L]

    https://www.ads-software.com/plugins/cachify/

Viewing 3 replies - 1 through 3 (of 3 total)
Viewing 3 replies - 1 through 3 (of 3 total)
  • The topic ‘Separate caches for HTTP and HTTPS’ is closed to new replies.