How to enable GZIP compression with htaccess

HTTP responses are compressed if the content-type header indicates a text document, for example text/css or text/html. To enable GZIP compression for other HTTP responses, like your REST or GraphQL APIs, use the AddOutputFilterByType directive:

AddOutputFilterByType DEFLATE application/json

1. Make sure environment variables are set

In the Dashboard with your fortrabbit App, make sure an environment variable key-value pair like this is present:

ENVIRONMENT=production

In some cases we have pre-populated that for you already. See also our environment variables article for more details on how environment variables are handled here.

2. Setup .htaccess files

Now in the local code base of your project, setup a custom .htaccess file for each environment in the web root of your project:

  • .htaccess in general and for local development
  • .htaccess_production for your fortrabbit App

This can also be extended to more environments. All .htaccess files should be under version control with Git.

3. Configure Composer

Add this to the script part of your composer.json in your local code base:

"scripts": {
    "post-install-cmd": [
      "@php -r \" define('HTSRC', 'web/.htaccess_' . getenv('ENVIRONMENT')); echo (file_exists(HTSRC) && copy(HTSRC, 'web/.htaccess')) ? HTSRC.' copied to web/.htaccess'.PHP_EOL : ''; \""
    ]
}

This Composer post install command will replace the contents of the .htaccess file with the contents of the file .htaccess_production, if that file is present and the environment variable ENVIRONMENT is set to production.

On fortrabbit, each time you deploy with Git (see our Git deployment article), composer install runs automatically (see our Composer article).

You can extend the concept to have more stages of course (see our multi staging article). To add custom rules for a staging environment, like http-auth (see article), create a matching .htaccess_staging file and set the ENVIRONMENT accordingly.

This also assumes that the root path of your App is web, which is true for Craft CMS. In the Composer example above, replace the web with the root path of your project, see an overview on different root paths here.

All articles

Craft CMS

Statamic

Install guides

Code access

Deployment

Git

SSH

SFTP

Troubleshooting

DNS

MySQL

TLS (SSL)

htaccess

Development

Teamwork

Platform

Billing

The Dashboard

Stacks

Tips & tricks

Quirks

Support

FAQ

Need individual help?
Learn about Company plans ›
Looking for an old article?
See the full list of articles ›
Found an error?
Contribute on GitHub ›