.htaccess.example

Summary

Maintainability
Test Coverage

<IfModule mod_headers.c>
  Header always set Access-Control-Allow-Origin "*"
  Header always set Access-Control-Allow-Methods "POST, GET, PUT, OPTIONS, PATCH, DELETE"
  Header always set Access-Control-Allow-Headers "Authorization,X-Accept-Charset,X-Accept,Content-Type"
</IfModule>

<IfModule mod_rewrite.c>
  <IfModule mod_negotiation.c>
    Options -MultiViews -Indexes
  </IfModule>

  RewriteEngine On

  # Handle Authorization Header
  RewriteCond %{HTTP:Authorization} .
  RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

  # Redirect Trailing Slashes If Not A Folder...
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} (.+)/$
  RewriteRule ^ %1 [L,R=301]

  # Handle Front Controller...
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^ index.php [L]
</IfModule>

<IfModule mod_expires.c>
  # Cache the audio and other static files.
  # It's up to the browser to respect this.
  ExpiresActive On

  ExpiresByType audio/mp3 "access plus 1 year"
  ExpiresByType audio/mpg "access plus 1 year"
  ExpiresByType audio/mpeg "access plus 1 year"
  ExpiresByType audio/ogg "access plus 1 year"
  ExpiresByType audio/aac "access plus 1 year"
  ExpiresByType audio/m4a "access plus 1 year"

  ExpiresByType image/gif "access plus 1 month"
  ExpiresByType image/jpeg "access plus 1 month"
  ExpiresByType image/png "access plus 1 month"

  ExpiresByType font/ttf "access plus 1 month"
  ExpiresByType font/woff "access plus 1 month"
  ExpiresByType image/svg+xml "access plus 1 month"
</IfModule>

<IfModule mod_deflate.c>

  # Disable deflation for media files.
  SetEnvIfNoCase Request_URI "^/play/" no-gzip dont-vary

  # ----------------------------------------------------------------------
  # Gzip compression.
  # Stolen from https://github.com/h5bp/server-configs-apache/
  # ----------------------------------------------------------------------

  # Force compression for mangled `Accept-Encoding` request headers
  # https://developer.yahoo.com/blogs/ydn/pushing-beyond-gzipping-25601.html

  <IfModule mod_setenvif.c>
    <IfModule mod_headers.c>
      SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
      RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
    </IfModule>
  </IfModule>

  # Compress all output labeled with one of the following MIME-types
  <IfModule mod_filter.c>
      AddOutputFilterByType DEFLATE "application/atom+xml" \
                                    "application/javascript" \
                                    "application/json" \
                                    "application/ld+json" \
                                    "application/manifest+json" \
                                    "application/rdf+xml" \
                                    "application/rss+xml" \
                                    "application/schema+json" \
                                    "application/vnd.geo+json" \
                                    "application/vnd.ms-fontobject" \
                                    "application/x-font-ttf" \
                                    "application/x-javascript" \
                                    "application/x-web-app-manifest+json" \
                                    "application/xhtml+xml" \
                                    "application/xml" \
                                    "font/eot" \
                                    "font/opentype" \
                                    "image/bmp" \
                                    "image/svg+xml" \
                                    "image/vnd.microsoft.icon" \
                                    "image/x-icon" \
                                    "text/cache-manifest" \
                                    "text/css" \
                                    "text/html" \
                                    "text/javascript" \
                                    "text/plain" \
                                    "text/vcard" \
                                    "text/vnd.rim.location.xloc" \
                                    "text/vtt" \
                                    "text/x-component" \
                                    "text/x-cross-domain-policy" \
                                    "text/xml"

  </IfModule>

</IfModule>

php_value upload_max_filesize 50M
php_value post_max_size 50M