• The Horde webmail has been deprecated. Its complete removal is scheduled for April 2025. For details and recommended actions, see the Feature and Deprecation Plan.
  • We’re working on enhancing the Monitoring feature in Plesk, and we could really use your expertise! If you’re open to sharing your experiences with server and website monitoring or providing feedback, we’d love to have a one-hour online meeting with you.

Resolved Mod_expires Not Working

Damo

Basic Pleskian
Greetings.

I'm having trouble getting this to work in my .htaccess file, mod_expires is definitely installed.

I've tried multiple website speed test tools, they are all recommending I turn on caching for static files png,js etc...

Here's my .htaccess file. Can you see anything wrong with this?

Code:
#    Mod_security can interfere with uploading of content such as attachments. If you
#    cannot attach files, remove the "#" from the lines below.
#<IfModule mod_security.c>
#    SecFilterEngine Off
#    SecFilterScanPOST Off
#</IfModule>

ErrorDocument 401 default
ErrorDocument 403 default
ErrorDocument 404 default
ErrorDocument 405 default
ErrorDocument 406 default
ErrorDocument 500 default
ErrorDocument 501 default
ErrorDocument 503 default


<IfModule mod_rewrite.c>
    RewriteEngine On

    #    If you are having problems with the rewrite rules, remove the "#" from the
    #    line that begins "RewriteBase" below. You will also have to change the path
    #    of the rewrite to reflect the path to your XenForo installation.
    #RewriteBase /xenforo

    #    This line may be needed to enable WebDAV editing with PHP as a CGI.
    #RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^.*$ - [NC,L]
    RewriteRule ^(data/|js/|styles/|install/|favicon\.ico|crossdomain\.xml|robots\.txt) - [NC,L]
    RewriteRule ^.*$ index.php [NC,L]
</ifModule>

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType application/x-javascript A1209600
    ExpiresByType text/javascript A1209600
    ExpiresByType application/javascript A1209600
    ExpiresByType text/css A1209600
    ExpiresByType image/x-icon A2592000
    ExpiresByType image/icon A2592000
    ExpiresByType application/x-ico A2592000
    ExpiresByType application/ico A2592000
    ExpiresByType image/gif A2592000
    ExpiresByType image/jpeg A172800
    ExpiresByType image/jpg A172800
    ExpiresByType image/png A172800
    ExpiresByType application/x-shockwave-flash A172800
</IfModule>
 
Is Apache serving your static files, or nginx?
These look like good Apache directives, but if nginx is being run as a proxy then nginx will have to be the one setting the expires tags.
 
Well. That explains a lot.

Yes, I'm using nginx as a reverse proxy. How would I go about setting the expires tags for nginx?
 
Just to experiment, I've turned off nginx as a reverse proxy. Still apparently not working according to gtmetrix.

Ideas?
 
Here's the result

HTTP/1.1·200·OK(CR)(LF)
Date:·Wed,·10·Aug·2016·20:17:30·GMT(CR)(LF)
Server:·Apache(CR)(LF)
X-Powered-By:·PHP/7.0.9(CR)(LF)
Expires:·Thu,·19·Nov·1981·08:52:00·GMT(CR)(LF)
Cache-control:·private,·max-age=0(CR)(LF)
X-Frame-Options:·SAMEORIGIN(CR)(LF)
Set-Cookie:·xf_session=27face0f2fcb4feb484134c33788082e;·path=/;·HttpOnly(CR)(LF)
Last-Modified:·Wed,·10·Aug·2016·20:17:30·GMT(CR)(LF)
Content-Length:·57966(CR)(LF)
X-Powered-By:·PleskLin(CR)(LF)
MS-Author-Via:·DAV(CR)(LF)
Connection:·close(CR)(LF)
Content-Type:·text/html;·charset=UTF-8(CR)(LF)
(CR)(LF)
 
Here's the result

Hmmm.... it looks like the "Expires" header is getting set, but it is not getting set to a future date. I'd guess either the file tested was not in your list of ExpiresByType. Try setting a ExpiresDefault catchall in your settings for a few minutes in the future and see if that changes the date using the online tool.
 
I've added this, still appears to be the same

ExpiresDefault "access plus 1 days"
The Expires header still shows as in 1981? It is possible that the expires settings are changed in another config file for that host. Are the other settings in that .htaccess file working?
 
Last edited:
It's self-hosted on a VPS, I don't remember changing any other files other than .htaccess for caching.

I'm going to freshly install Plesk on another VPS to see if I get the same result.
 
Hmmm... Works on a fresh install.

I'll just recreate another VPS if that solves the issue, easy enough.

Thanks for your help.
 
Back
Top