Created
May 3, 2016 20:44
-
-
Save cdwharton/b005bb1cdc386ea0a32c203d87bda6cb to your computer and use it in GitHub Desktop.
.htaccess speed optimizations
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # ---------------------------------------------------------------------- | |
| # | File access | | |
| # ---------------------------------------------------------------------- | |
| # Block access to directories without a default document. | |
| # | |
| # You should leave the following uncommented, as you shouldn't allow | |
| # anyone to surf through every directory on your server (which may | |
| # includes rather private places such as the CMS's directories). | |
| <IfModule mod_autoindex.c> | |
| Options -Indexes | |
| </IfModule> | |
| # ---------------------------------------------------------------------- | |
| # | Document modes | | |
| # ---------------------------------------------------------------------- | |
| # Force Internet Explorer 8/9/10 to render pages in the highest mode | |
| # available in the various cases when it may not. | |
| # | |
| # https://hsivonen.fi/doctype/#ie8 | |
| # | |
| # (!) Starting with Internet Explorer 11, document modes are deprecated. | |
| # If your business still relies on older web apps and services that were | |
| # designed for older versions of Internet Explorer, you might want to | |
| # consider enabling `Enterprise Mode` throughout your company. | |
| # | |
| # https://msdn.microsoft.com/en-us/library/ie/bg182625.aspx#docmode | |
| # http://blogs.msdn.com/b/ie/archive/2014/04/02/stay-up-to-date-with-enterprise-mode-for-internet-explorer-11.aspx | |
| <IfModule mod_headers.c> | |
| Header set X-UA-Compatible "IE=edge" | |
| # `mod_headers` cannot match based on the content-type, however, | |
| # the `X-UA-Compatible` response header should be send only for | |
| # HTML documents and not for the other resources. | |
| <FilesMatch "\.(appcache|atom|bbaw|bmp|crx|css|cur|eot|f4[abpv]|flv|geojson|gif|htc|ico|jpe?g|js|json(ld)?|m4[av]|manifest|map|mp4|oex|og[agv]|opus|otf|pdf|png|rdf|rss|safariextz|svgz?|swf|topojson|tt[cf]|txt|vcard|vcf|vtt|webapp|web[mp]|webmanifest|woff2?|xloc|xml|xpi)$"> | |
| Header unset X-UA-Compatible | |
| </FilesMatch> | |
| </IfModule> | |
| # ###################################################################### | |
| # # WEB PERFORMANCE # | |
| # ###################################################################### | |
| # ---------------------------------------------------------------------- | |
| # | Compression | | |
| # ---------------------------------------------------------------------- | |
| <IfModule mod_deflate.c> | |
| # 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 media types. | |
| # | |
| # (!) For Apache versions below version 2.3.7 you don't need to | |
| # enable `mod_filter` and can remove the `<IfModule mod_filter.c>` | |
| # and `</IfModule>` lines as `AddOutputFilterByType` is still in | |
| # the core directives. | |
| # | |
| # https://httpd.apache.org/docs/current/mod/mod_filter.html#addoutputfilterbytype | |
| <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> | |
| # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | |
| # Map the following filename extensions to the specified | |
| # encoding type in order to make Apache serve the file types | |
| # with the appropriate `Content-Encoding` response header | |
| # (do note that this will NOT make Apache compress them!). | |
| # | |
| # If these files types would be served without an appropriate | |
| # `Content-Enable` response header, client applications (e.g.: | |
| # browsers) wouldn't know that they first need to uncompress | |
| # the response, and thus, wouldn't be able to understand the | |
| # content. | |
| # | |
| # https://httpd.apache.org/docs/current/mod/mod_mime.html#addencoding | |
| <IfModule mod_mime.c> | |
| AddEncoding gzip svgz | |
| </IfModule> | |
| </IfModule> | |
| # ---------------------------------------------------------------------- | |
| # | Expires headers | | |
| # ---------------------------------------------------------------------- | |
| # Serve resources with far-future expires headers. | |
| # | |
| # (!) If you don't control versioning with filename-based | |
| # cache busting, you should consider lowering the cache times | |
| # to something like one week. | |
| # | |
| # https://httpd.apache.org/docs/current/mod/mod_expires.html | |
| <IfModule mod_expires.c> | |
| ExpiresActive on | |
| ExpiresDefault "access plus 1 month" | |
| # CSS | |
| ExpiresByType text/css "access plus 1 year" | |
| # Data interchange | |
| ExpiresByType application/atom+xml "access plus 1 hour" | |
| ExpiresByType application/rdf+xml "access plus 1 hour" | |
| ExpiresByType application/rss+xml "access plus 1 hour" | |
| ExpiresByType application/json "access plus 0 seconds" | |
| ExpiresByType application/ld+json "access plus 0 seconds" | |
| ExpiresByType application/schema+json "access plus 0 seconds" | |
| ExpiresByType application/vnd.geo+json "access plus 0 seconds" | |
| ExpiresByType application/xml "access plus 0 seconds" | |
| ExpiresByType text/xml "access plus 0 seconds" | |
| # Favicon (cannot be renamed!) and cursor images | |
| ExpiresByType image/vnd.microsoft.icon "access plus 1 week" | |
| ExpiresByType image/x-icon "access plus 1 week" | |
| # HTML | |
| ExpiresByType text/html "access plus 0 seconds" | |
| # JavaScript | |
| ExpiresByType application/javascript "access plus 1 year" | |
| ExpiresByType application/x-javascript "access plus 1 year" | |
| ExpiresByType text/javascript "access plus 1 year" | |
| # Manifest files | |
| ExpiresByType application/manifest+json "access plus 1 week" | |
| ExpiresByType application/x-web-app-manifest+json "access plus 0 seconds" | |
| ExpiresByType text/cache-manifest "access plus 0 seconds" | |
| # Media files | |
| ExpiresByType audio/ogg "access plus 1 month" | |
| ExpiresByType image/bmp "access plus 1 month" | |
| ExpiresByType image/gif "access plus 1 month" | |
| ExpiresByType image/jpeg "access plus 1 month" | |
| ExpiresByType image/png "access plus 1 month" | |
| ExpiresByType image/svg+xml "access plus 1 month" | |
| ExpiresByType image/webp "access plus 1 month" | |
| ExpiresByType video/mp4 "access plus 1 month" | |
| ExpiresByType video/ogg "access plus 1 month" | |
| ExpiresByType video/webm "access plus 1 month" | |
| # Web fonts | |
| # Embedded OpenType (EOT) | |
| ExpiresByType application/vnd.ms-fontobject "access plus 1 month" | |
| ExpiresByType font/eot "access plus 1 month" | |
| # OpenType | |
| ExpiresByType font/opentype "access plus 1 month" | |
| # TrueType | |
| ExpiresByType application/x-font-ttf "access plus 1 month" | |
| # Web Open Font Format (WOFF) 1.0 | |
| ExpiresByType application/font-woff "access plus 1 month" | |
| ExpiresByType application/x-font-woff "access plus 1 month" | |
| ExpiresByType font/woff "access plus 1 month" | |
| # Web Open Font Format (WOFF) 2.0 | |
| ExpiresByType application/font-woff2 "access plus 1 month" | |
| # Other | |
| ExpiresByType text/x-cross-domain-policy "access plus 1 week" | |
| </IfModule> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment