ExpiresDefault "access plus 1 days"
sets an expiration date of 1 day (24 hours) in the future for all material, unless overridden by an ExpiresByType directive. The word "access" means "right now as you're reading this".
<IfModule> means that this part of your htaccess was imported from some other source. Once it's on your own site, you either have the module or you don't, so the envelope isn't needed. (Possible exception: if this section is within the WP boilerplate, beginning and ending with #comment lines about WordPress, it
may be necessary to leave the envelope.)
Right now your expiration headers are:
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
= images can be cached for up to a year, though it's not likely an actual browser's cache will stick around for that long.
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType text/x-javascript "access plus 1 month"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
= scripts, stylesheets and some other stuff can be cached up to a month. (Careful with this! It can mean that if you make major changes to a site's "look", frequent visitors may be viewing new content with old stylesheets, so they don't see what you wanted them to see.)
ExpiresByType image/x-icon "access plus 1 year"
= let the icon sit around for a year. (I don't know if x-icon means favicon or something entirely different. Wouldn't be surprised if browsers just ignore this anyway.)
ExpiresDefault "access plus 1 days"
= anything that's left over can be retained by the browser for up to one day but no longer.
If your content updates more frequently, you should set a shorter expiration time. The shortest possible is
ExpiresByType text/html "access"
ExpiresByType text/php "access"
which essentially means "make a fresh request every time". This means, for example, that if a user follows a link from page A to page B, and then returns to page A, the browser sends in a fresh request to the server for page A again. Otherwise the browser will probably just reload its cached page A. Normally you wouldn't do this on a live site.
You can set any time period you like; see
Apache docs [httpd.apache.org] for permitted wording. You can be as precise as you want, down to the second:
ExpiresByType text/html "access plus 1 hours 14 minutes 57 seconds"
ExpiresByType text/php "access plus 2 hours 36 minutes 11 seconds"
All of this refers to actual, physical files, not URLs. If it's a WordPress site, the actual, physical file is almost always "index.php" so your "type" is "text/php".