-
Notifications
You must be signed in to change notification settings - Fork 442
/
.htaccess
206 lines (179 loc) · 8.34 KB
/
.htaccess
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
# This .htaccess file is used to speed up this website
#
# Created by Sergey Chernyshev
# Adapted by Zeno Rocha
#
# See https://github.com/sergeychernyshev/.htaccess
# --------------------------------------------------------------------------------------
# Specify a character set:
# https://developers.google.com/speed/docs/best-practices/rendering#SpecifyCharsetEarly
# --------------------------------------------------------------------------------------
AddCharset UTF-8 .html
# ----------------------------------------------------------------------
# Proper MIME type for all files
#
# Copied from the HTML5 boilerplate project's .htaccess file
# https://github.com/h5bp/html5-boilerplate/blob/master/.htaccess
# ----------------------------------------------------------------------
# JavaScript
# Normalize to standard type (it's sniffed in IE anyways)
# tools.ietf.org/html/rfc4329#section-7.2
AddType application/javascript js jsonp
AddType application/json json
# Audio
AddType audio/ogg oga ogg
AddType audio/mp4 m4a f4a f4b
# Video
AddType video/ogg ogv
AddType video/mp4 mp4 m4v f4v f4p
AddType video/webm webm
AddType video/x-flv flv
# SVG
# Required for svg webfonts on iPad
# twitter.com/FontSquirrel/status/14855840545
AddType image/svg+xml svg svgz
AddEncoding gzip svgz
# Webfonts
AddType application/vnd.ms-fontobject eot
AddType application/x-font-ttf ttf ttc
AddType font/opentype otf
AddType application/x-font-woff woff
# Assorted types
AddType image/x-icon ico
AddType image/webp webp
AddType text/cache-manifest appcache manifest
AddType text/x-component htc
AddType application/xml rss atom xml rdf
AddType application/x-chrome-extension crx
AddType application/x-opera-extension oex
AddType application/x-xpinstall xpi
AddType application/octet-stream safariextz
AddType application/x-web-app-manifest+json webapp
AddType text/x-vcard vcf
AddType application/x-shockwave-flash swf
AddType text/vtt vtt
# --------------------------------------------------------------------------------------
# Compression: http://code.google.com/speed/page-speed/docs/payload.html#GzipCompression
# --------------------------------------------------------------------------------------
<IfModule mod_deflate.c>
AddOutputFilter DEFLATE application/atom+xml
AddOutputFilter DEFLATE application/json
AddOutputFilter DEFLATE application/xhtml+xml
AddOutputFilter DEFLATE application/xml
AddOutputFilter DEFLATE text/css
AddOutputFilter DEFLATE text/html
AddOutputFilter DEFLATE text/plain
AddOutputFilter DEFLATE text/x-component
AddOutputFilter DEFLATE text/xml
# The following MIME types are in the process of registration
AddOutputFilter DEFLATE application/xslt+xml
AddOutputFilter DEFLATE image/svg+xml
# The following MIME types are NOT registered
AddOutputFilter DEFLATE application/mathml+xml
AddOutputFilter DEFLATE application/rss+xml
# JavaScript has various MIME types
AddOutputFilter DEFLATE application/javascript
AddOutputFilter DEFLATE application/x-javascript
AddOutputFilter DEFLATE text/ecmascript
AddOutputFilter DEFLATE text/javascript
# .ico files and other compressible images
AddOutputFilter DEFLATE image/vnd.microsoft.icon
AddOutputFilter DEFLATE image/x-icon
AddOutputFilter DEFLATE image/bmp
AddOutputFilter DEFLATE image/tiff
AddOutputFilter DEFLATE application/pdf
# compressible fonts (.woff is already compressed)
AddOutputFilter DEFLATE font/opentype
AddOutputFilter DEFLATE application/x-font-ttf
AddOutputFilter DEFLATE application/vnd.ms-fontobject
</IfModule>
# ----------------------------------------------------------------------
# Enabling filename rewriting (file.XXX.ext) if URL rewriting is enabled
# Otherwise URLs will use query strings (file.ext?v=XXX)
#
# More proxies cache assets if there is no query string
# ----------------------------------------------------------------------
<IfModule mod_rewrite.c>
RewriteEngine On
# Setting up an environment variable so your code can detect if mod_rewrite rules are executable
# in this folder and you can use file.123.jpg or you need to fall back to file.jpg?123
RewriteRule . - [E=URLVERSIONREWRITE:YES]
# Rewrites a version in file.123.jpg as well as timestamped version file.123_m_12345123512354.jpg
# to original file.jpg so you can use it instead of file.jpg?123 which isn't cached in some proxies.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\.(\d+)(_m_\d+)?\.([^\.]+)$ $1.$4 [L,QSA]
# Rewrites a version in file.ac123fe.jpg to original file.jpg
# so you can use it instead of file.jpg?123 which isn't cached in some proxies.
# Used for hash-based URLs where having a timestamp is not necessary.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\.([a-z\d]+)\.([^\.]+)$ $1.$3 [L,QSA]
</IfModule>
# -------------------------------------------------------------------------------------------------
# Browser Caching: http://code.google.com/speed/page-speed/docs/caching.html#LeverageBrowserCaching
#
# Google recommends specifying the following for all cacheable resources:
#
# 1. Expires or Cache-Control max-age
#
# Set Expires to a minimum of one month, and preferably up to one year, in the future. (We
# prefer Expires over Cache-Control: max-age because it is is more widely supported.) Do not
# set it to more than one year in the future, as that violates the RFC guidelines.
#
# 2. Last-Modified or ETag
#
# Set the Last-Modified date to the last time the resource was changed. If the Last-Modified
# date is sufficiently far enough in the past, chances are the browser won't refetch it.
#
# Per Google: "it is redundant to specify both Expires and Cache-Control: max-age, or to specify
# both Last-Modified and ETag."
# --------------------------------------------------------------------------------------------------
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType application/json "access plus 1 year"
ExpiresByType application/pdf "access plus 1 year"
ExpiresByType application/x-shockwave-flash "access plus 1 year"
ExpiresByType image/bmp "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
ExpiresByType image/tiff "access plus 1 year"
ExpiresByType image/vnd.microsoft.icon "access plus 1 year"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresByType text/css "access plus 1 year"
ExpiresByType video/x-flv "access plus 1 year"
ExpiresByType application/vnd.bw-fontobject "access plus 1 year"
ExpiresByType application/x-font-ttf "access plus 1 year"
ExpiresByType application/font-woff "access plus 1 year"
ExpiresByType font/opentype "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
# The following MIME types are in the process of registration
ExpiresByType application/xslt+xml "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
# The following MIME types are NOT registered
ExpiresByType application/mathml+xml "access plus 1 year"
ExpiresByType application/rss+xml "access plus 1 year"
# JavaScript has various MIME types
ExpiresByType application/x-javascript "access plus 1 year"
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType text/ecmascript "access plus 1 year"
ExpiresByType text/javascript "access plus 1 year"
</IfModule>
# TODO: Set Last-Modified per Google's recommendation to complete browser caching
# -------------------------------------------------------------------------
# Disabling ETags as they are most likely misconfigured and
# do not add functionalit beyond Last-Modified
# -------------------------------------------------------------------------
<IfModule mod_headers.c>
# Try removing etag headers (if it's coming from proxy for example)
Header unset ETag
</IfModule>
# Remove ETags
FileETag None
# -------------------------------------------------------------------------
# Google mod_pagespeed definitions
# -------------------------------------------------------------------------
<IfModule pagespeed_module>
ModPagespeed on
ModPagespeedEnableFilters lazyload_images
</IfModule>