Using .htaccess Rules for Cache Control
What Is Cache Control?
Cache control defines how browsers and intermediary servers store and reuse website content. Proper caching ensures that repeat visitors load your site faster by retrieving resources from their browser’s local storage rather than the server.
- Faster Load Times: Cached resources don’t need to be fetched again from the server.
- Reduced Bandwidth Usage: Less frequent requests save hosting resources.
- Improved SEO: Faster sites rank better on search engines like Google.
Cache Control Configurator
The .htaccess
file is a configuration file used by Apache servers to manage settings like redirects, access control, and caching. By adding specific rules, you can define caching behavior for your website resources.
Set Up Cache-Control Headers
Add the following lines to your .htaccess file to enable caching for specific file types:
ExpiresActive On
# ImagesExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
# CSS and JavaScript
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"
# HTML
ExpiresByType text/html "access plus 1 week"
# Default
ExpiresDefault "access plus 1 month"
Use Cache-Control Headers
For additional fine-grained control, add Cache-Control
headers alongside Expires
.
# Enable browser caching
<FilesMatch "\.(jpg|jpeg|png|gif|js|css|ico|svg|woff|woff2|ttf|eot|otf|html|xml)$">
Header set Cache-Control "max-age=31536000, public"
# Prevent caching for dynamic files
<FilesMatch "\.(php|cgi|pl|htm|html)$">
Header set Cache-Control "no-store, no-cache, must-revalidate, max-age=0"
Header set Pragma "no-cache"
Gzip Compression for Cached Files
To further optimize performance, enable Gzip compression in the same .htaccess
file:
AddOutputFilterByType DEFLATE text/html text/css application/javascript application/json text/xml application/xml application/xml+rss text/javascript
Tip
Header set Connection keep-alive
# Cache-control headers
# 2 HOURS
#<filesMatch "*">
Header set Cache-Control "max-age=7200, must-revalidate"
#
# 480 weeks - 290304000
# 2 WEEKS
<filesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|swf)$">
Header set Cache-Control "max-age=1209600, public"
# 1 DAY
<filesMatch "\.(css)$">
Header set Cache-Control "max-age=86400, public, must-revalidate"
#Header set Cache-Control "max-age=0, public, must-revalidate"
# 2 DAYS
<filesMatch "\.(xml|txt)$">
Header set Cache-Control "max-age=172800, public, must-revalidate"
# 2 HOURS
<filesMatch "\.(html|htm)$">
Header set Cache-Control "max-age=7200, must-revalidate"
<FilesMatch "\.(gif|jpg|png|ico|css|js|pdf|txt)$">
Header append Cache-Control "public"
Troubleshooting Common Issues
- 500 Internal Server Error: This usually occurs due to syntax errors in
.htaccess
. Use an online Apache checker to validate your file. - No Visible Performance Improvement: Ensure
mod_headers
andmod_expires
are enabled on your Apache server. If you don’t have access to server configuration, consult your hosting provider.
Whether you're running a high-traffic e-commerce site or a personal blog, optimized caching strategies will help you make the most of your hosting resources.
Start with the examples above, test rigorously, and adjust settings to meet your site’s needs. With the right caching in place, your website will be faster, more reliable, and ready to handle a growing audience.
For hosting-specific support, consult your hosting provider or a technical expert for guidance.