Supersimple static file based (html) php site cache

前端 未结 5 1041
长情又很酷
长情又很酷 2021-02-09 21:59

I have a website that basically only displays things without any forms and post-gets. This website is PHP based and hosted on shared hosting. It rarely changes. I would like to

5条回答
  •  借酒劲吻你
    2021-02-09 22:56

    I have a simple algo for HTML caching, predicated on the following conditions

    • The user is a guest (logged on users have a blog_user cookie set)
    • The request URI is a GET that contains no request parameters
    • An HTML cache version of the file exists

    then an .htaccessrewrite rule kicks in, mapping the request to a cached file. Anything else is assumed to be context-specific and therefore not cacheable. Note that I use wikipedia-style URI mapping for my blog so /article-23 gets mapped to /index.php=article-23 when not cached.

    I use a single HTML access file in my DOCUMENT_ROOT directory and here is the relevant extract. It's the third rewrite rule that does what you want. Any script which generates cacheable O/P wraps this in an ob_start() ob_get_clean() pair and write out the HTML cache file (though this is all handled by my templating engine). Updates also flush the HTML cache directory as necessary.

    RewriteEngine on
    RewriteBase /
    
    # ...
    # Handle blog index
    RewriteRule ^blog/$                                    blog/index               [skip=1]
    
    # If the URI maps to a file that exists then stop.  This will kill endless loops
    
    RewriteCond %{REQUEST_FILENAME}                        -f
    RewriteRule ^blog/.*                                   -                        [last]
    
    # If the request is HTML cacheable (a GET to a specific list, with no query params)
    # the user is not logged on and the HTML cache file exists then use it instead of executing PHP
    
    RewriteCond %{HTTP_COOKIE}                             !blog_user
    RewriteCond %{REQUEST_METHOD}%{QUERY_STRING}           =GET                     [nocase]
    RewriteCond %{DOCUMENT_ROOT}/blog/html_cache/$1.html   -f
    RewriteRule ^blog/(article-\d+|index|sitemap.xml|search-\w+|rss-[0-9a-z]*)$ \
                                                           blog/html_cache/$1.html  [last]
    
    # Anything else relating to the blog pass to index.php
    RewriteRule blog/(.*)                                  blog/index.php?page=$1   [qsappend,last]
    

    Hope this helps. My blog describes this in more detail. :-)

提交回复
热议问题