html5-boilerplate 1.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. data/README.md +30 -94
  2. data/VERSION +1 -1
  3. data/lib/app/helpers/html5_boilerplate_helper.rb +1 -0
  4. data/lib/html5-boilerplate.rb +1 -1
  5. data/templates/project/_head.html.haml +8 -5
  6. data/templates/project/_javascripts.html.haml +16 -6
  7. data/templates/project/_stylesheets.html.haml +1 -1
  8. data/templates/project/application.html.haml +1 -1
  9. data/templates/project/files/apple-touch-icon-114x114-precomposed.png +0 -0
  10. data/templates/project/files/apple-touch-icon-57x57-precomposed.png +0 -0
  11. data/templates/project/files/apple-touch-icon-72x72-precomposed.png +0 -0
  12. data/templates/project/files/apple-touch-icon-precomposed.png +0 -0
  13. data/templates/project/files/apple-touch-icon.png +0 -0
  14. data/templates/project/files/htaccess +135 -110
  15. data/templates/project/index.html.haml +37 -20
  16. data/templates/project/javascripts/{jquery-1.6.js → jquery-1.6.2.js} +369 -253
  17. data/templates/project/javascripts/jquery-1.6.2.min.js +18 -0
  18. data/templates/project/javascripts/modernizr-2.0.6.min.js +4 -0
  19. data/templates/project/javascripts/plugins.js +7 -3
  20. data/templates/project/javascripts/rails.js +90 -37
  21. data/templates/project/manifest.rb +10 -7
  22. data/templates/project/partials/_base.scss +9 -18
  23. data/templates/project/partials/_media.scss +20 -14
  24. data/templates/project/partials/_overrides.scss +47 -57
  25. data/templates/project/partials/_page.scss +0 -32
  26. data/templates/project/style.scss +6 -10
  27. metadata +50 -61
  28. data/stylesheets/_html5-boilerplate.scss +0 -20
  29. data/stylesheets/html5-boilerplate/_fonts.scss +0 -42
  30. data/stylesheets/html5-boilerplate/_helpers.scss +0 -71
  31. data/stylesheets/html5-boilerplate/_media.scss +0 -35
  32. data/stylesheets/html5-boilerplate/_reset.scss +0 -43
  33. data/stylesheets/html5-boilerplate/_styles.scss +0 -126
  34. data/templates/project/handheld.scss +0 -8
  35. data/templates/project/javascripts/jquery-1.6.min.js +0 -16
  36. data/templates/project/javascripts/modernizr-1.7.min.js +0 -2
  37. data/templates/project/javascripts/respond.min.js +0 -7
data/README.md CHANGED
@@ -1,5 +1,23 @@
1
- Compass Html5 Boilerplate
2
- =========================
1
+ NOTICE!!! (And Now for Something Completely Different)
2
+ =========================================================
3
+
4
+ If you are using Rails, you should now be using [html5-rails](https://github.com/sporkd/html5-rails) instead of this gem.
5
+ It has all you need to get Html5Boilerplate up and running with the Rails 3 asset pipeline, plus a bunch of other nice new conventions.
6
+
7
+ For the rest of you who still want to use this gem for standalone projects or for older verisons of Rails, here's what you need to know:
8
+
9
+ * The compass CSS library has been moved out of this gem and into the [compass-h5bp](https://github.com/sporkd/compass-h5bp) gem. This allows both gems to benifit from updates to the compass library.
10
+ * The newest version of [compass-h5bp](https://github.com/sporkd/compass-h5bp) uses normalize.css instead of reset, just like current Html5Boilerplate. So upgrading might be a pain.
11
+
12
+ So in short, I have shifted my efforts to [html5-rails](https://github.com/sporkd/html5-rails), and I now view this gem
13
+ as the first standalone implementation of [compass-h5bp](https://github.com/sporkd/compass-h5bp).
14
+ To this end I will continue to merge pull requests for those who want to continue using it.
15
+
16
+ Of course, I encourage anyone to create other implementations of [compass-h5bp](https://github.com/sporkd/compass-h5bp) for [insert your framework here].
17
+
18
+
19
+ About
20
+ ==========
3
21
 
4
22
  HTML5 Boilerplate is a Compass extension based on HTML5 Boilerplate by Paul Irish.
5
23
  You can use it to kick-start fully compliant HTML5 applications. Setup your Rails
@@ -16,104 +34,17 @@ Features
16
34
  * Lets you pick and choose only the Boilerplate mixins and includes you want
17
35
  * Generates sass/scss partials to keep your stylesheets organized
18
36
  * Generates modularized haml layouts for Rails apps (header, footer, flashes, etc.)
19
- * Rails helpers to cleanly hide a little of Boilerplate's html complexity
20
- * Loads minified jQuery in production envs, but uncompressed version in development
21
- * Rails jquery-ujs driver installed and loaded along with jQuery and Modernizr
22
- * Setting API Key in google.yml will auto-load jquery from google (async)
23
- * Setting Analytics ID in google.yml will auto-load google analytics (async)
24
- * Uses content_for hooks to keep all your javascript and stylesheets in one place
25
- * Falls back to native Compass for stuff like clearfix and image replacement
26
37
  * Fully commented source, but the haml/sass output remains comment free
27
38
  * Not tested on animals
28
39
 
29
- Rails Installation
30
- ==================
31
-
32
- First, make sure the following gems are in your Gemfile
33
-
34
- gem "compass"
35
- gem "haml"
36
- gem "html5-boilerplate"
37
-
38
- Then run the following
39
-
40
- bundle install
41
- compass init rails -r html5-boilerplate -u html5-boilerplate --force
42
-
43
- (Using `--force` flag will overwrite any files that may already exist. In most cases this is probably what you want.)
44
-
45
- (For a new project, I answer "Yes" to keep my stylesheets in app/stylesheets, but "No" for compiling them into public/stylesheets/compiled.)
46
-
47
- Now remove your application.html.erb so that Haml can do its thing
48
-
49
- mv app/views/layouts/application.html.erb app/views/layouts/application.html.old
50
-
51
- Start your Rails server, and you're done!
52
-
53
-
54
- **Here's a list of the files that compass init installed in your Rails project:**
55
-
56
- app/views/layouts/application.html.haml
57
- app/views/layouts/_flashes.html.haml
58
- app/views/layouts/_footer.html.haml
59
- app/views/layouts/_head.html.haml
60
- app/views/layouts/_header.html.haml
61
- app/views/layouts/_javascripts.html.haml
62
- app/views/layouts/_stylesheets.html.haml
63
-
64
- app/stylesheets/style.scss
65
- app/stylesheets/partials/_base.scss
66
- app/stylesheets/partials/_overrides.scss
67
- app/stylesheets/partials/_page.scss
68
- app/stylesheets/partials/_fonts.scss
69
- app/stylesheets/partials/_media.scss
70
-
71
- public/404.html
72
- public/.htaccess
73
- public/crossdomain.xml
74
- public/robots.txt
75
- public/humans.txt
76
- public/apple-touch-icon.png
77
- public/favicon.ico
78
-
79
- public/javascripts/jquery.min.js
80
- public/javascripts/modernizr.min.js
81
- public/javascripts/plugins.js
82
- public/javascripts/rails.js
83
-
84
- config/compass.rb
85
- config/initializers/compass.rb
86
- config/google.yml
87
-
88
- The Scss files above will automatically get compiled to your Sass compilation directory:
89
-
90
- public/stylesheets/style.css
91
-
92
- **Note:** If you already have a config/compass.rb file in your project, you may need to
93
- manually add the following line to the top:
94
-
95
- require 'html5-boilerplate'
96
-
97
- ### A few more points...
98
-
99
- The haml will compile to the equivalent of html5-boilerplate's index.html,
100
- but with all comments stripped out, and some additional rails stuff
101
- like csrf_meta_tags, flashes and the Rails jquery-ujs driver.
102
-
103
- You can set your own Google Analytics Account ID and your Google API Key
104
- either as ENV variables, or inside config/google.yml. (see that file)
105
-
106
- This extension has only been tested on Rails3.
107
-
108
40
 
109
- Stand Alone Installation
41
+ Installation
110
42
  ========================
111
43
 
112
- Use this if you're not using Rails, but still want compass and the html5-boilerplate sass libraries,
113
- It will create a simplified index.html (with haml source), but without the nice Rails helpers.
44
+ (This is for stand-alone. Rails install instructions live on only in the git history)
114
45
 
115
46
  gem install html5-boilerplate
116
- compass create my_project -r html5-boilerplate -u html5-boilerplate --javascripts-dir js --css-dir css
47
+ compass create my_project -r compass-h5bp -r html5-boilerplate -u html5-boilerplate --javascripts-dir js --css-dir css
117
48
 
118
49
  The `--javascripts-dir` and `--css-dir` flags are to keep consistent with the original project layout.
119
50
  If you omit them, be sure to edit your javascript and style tags accordingly in index.html.
@@ -127,6 +58,10 @@ If you omit them, be sure to edit your javascript and style tags accordingly in
127
58
  robots.txt
128
59
  humans.txt
129
60
  apple-touch-icon.png
61
+ apple-touch-icon-57x57-precomposed.png
62
+ apple-touch-icon-72x72-precomposed.png
63
+ apple-touch-icon-114x114-precomposed.png
64
+ apple-touch-icon-precomposed.png
130
65
  favicon.ico
131
66
 
132
67
  src/style.scss
@@ -136,9 +71,10 @@ If you omit them, be sure to edit your javascript and style tags accordingly in
136
71
  src/partials/_fonts.scss
137
72
  src/partials/_media.scss
138
73
 
139
- js/jquery.min.js
140
- js/modernizr.min.js
74
+ js/jquery-1.6.2.min.js
75
+ js/modernizr-2.0.6.min.js
141
76
  js/plugins.js
77
+ js/script.js
142
78
 
143
79
  .htaccess
144
80
  config.rb
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.0
1
+ 2.1.0
@@ -1,6 +1,7 @@
1
1
  module Html5BoilerplateHelper
2
2
  # Create a named haml tag to wrap IE conditional around a block
3
3
  # http://paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither
4
+ # Consider adding an manifest.appcache: h5bp.com/d/Offline
4
5
  def ie_tag(name=:body, attrs={}, &block)
5
6
  attrs.symbolize_keys!
6
7
  haml_concat("<!--[if lt IE 7]> #{ tag(name, add_class('ie6', attrs), true) } <![endif]-->".html_safe)
@@ -1,4 +1,4 @@
1
- Compass::Frameworks.register("html5-boilerplate", :path => "#{File.dirname(__FILE__)}/..")
1
+ Compass::Frameworks.register("html5-boilerplate", :path => "#{File.dirname(__FILE__)}/..") if defined?(Compass)
2
2
 
3
3
  if defined?(ActionController)
4
4
  require File.join(File.dirname(__FILE__), 'app', 'helpers', 'html5_boilerplate_helper')
@@ -1,7 +1,8 @@
1
1
  %meta{ :charset => "utf-8" }/
2
2
 
3
- -# Always force latest IE rendering engine (even in intranet) & Chrome Frame
4
- -# Remove this if you use the .htaccess
3
+ -#
4
+ Use the .htaccess and remove these lines to avoid edge case issues.
5
+ More info: h5bp.com/b/378
5
6
  %meta{ "http-equiv" => "X-UA-Compatible", :content => "IE=edge,chrome=1" }/
6
7
 
7
8
  %title
@@ -19,8 +20,10 @@
19
20
  - if local_assigns[:stylesheet_partial]
20
21
  = render :partial => local_assigns[:stylesheet_partial]
21
22
 
22
- -# All JavaScript at the bottom, except for Modernizr and Respond.
23
- -# Modernizr enables HTML5 elements & feature detects; Respond is a polyfill for min/max-width CSS3 Media Queries
24
- = javascript_include_tag 'modernizr.min', 'respond.min'
23
+ -#
24
+ All JavaScript at the bottom, except for Modernizr / Respond.
25
+ Modernizr enables HTML5 elements & feature detects; Respond is a polyfill for min/max-width CSS3 Media Queries
26
+ For optimal performance, use a custom Modernizr build: www.modernizr.com/download/
27
+ = javascript_include_tag 'modernizr.min'
25
28
 
26
29
  = csrf_meta_tag
@@ -3,13 +3,13 @@
3
3
  -# remote_jquery and local_jquery helpers use minified jquery unless Rails.env is development
4
4
  - if !google_api_key.blank?
5
5
  = javascript_include_tag "//www.google.com/jsapi?key=#{google_api_key}"
6
- :javascript
7
- google.load(#{ remote_jquery("1.6") });
6
+ %script
7
+ google.load(#{ remote_jquery("1.6.2") });
8
8
  - else
9
- = javascript_include_tag "//ajax.googleapis.com/ajax/libs/jquery/#{ local_jquery("1.6") }"
9
+ = javascript_include_tag "//ajax.googleapis.com/ajax/libs/jquery/#{ local_jquery("1.6.2") }"
10
10
 
11
11
  -# fall back to local jQuery if necessary
12
- :javascript
12
+ %script
13
13
  window.jQuery || document.write("<script src='/javascripts/jquery.min.js'>\x3C/script>")
14
14
 
15
15
  = javascript_include_tag 'rails', 'plugins', 'application'
@@ -20,8 +20,18 @@
20
20
  -# asynchronous google analytics: mathiasbynens.be/notes/async-analytics-snippet
21
21
  -# Looks for google_account_id first in ENV['GOOGLE_ACCOUNT_ID'] then in config/google.yml
22
22
  - if !google_account_id.blank?
23
- :javascript
23
+ %script
24
24
  var _gaq=[["_setAccount","#{google_account_id}"],["_trackPageview"],["_trackPageLoadTime"]];
25
25
  (function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.async=1;
26
26
  g.src=("https:"==location.protocol?"//ssl":"//www")+".google-analytics.com/ga.js";
27
- s.parentNode.insertBefore(g,s)}(document,"script"));
27
+ s.parentNode.insertBefore(g,s)}(document,"script"));
28
+
29
+ -#
30
+ Prompt IE 6 users to install Chrome Frame. Remove this if you want to support IE 6.
31
+ chromium.org/developers/how-tos/chrome-frame-getting-started
32
+
33
+ <!--[if lt IE 7]>
34
+ %script{ :src => "//ajax.googleapis.com/ajax/libs/chrome-frame/1.0.3/CFInstall.min.js" }
35
+ %script
36
+ window.attachEvent('onload',function(){CFInstall.check({mode:'overlay'})})
37
+ <![endif]-->
@@ -1,5 +1,5 @@
1
1
  -# CSS: implied media="all"
2
- = stylesheet_link_tag 'style', :media => 'all'
2
+ = stylesheet_link_tag 'style'
3
3
 
4
4
  -# Append your own using content_for :stylesheets
5
5
  = yield :stylesheets
@@ -1,6 +1,6 @@
1
1
  !!! 5
2
2
  -# http://paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither
3
- -ie_html :class => 'no-js', :lang => 'en' do
3
+ -ie_html :class => 'no-js oldie', :lang => 'en' do
4
4
  %head
5
5
  -# To render a different stylesheet partial inside the head (i.e. for admin layout)
6
6
  -# just copy _stylesheets.html.haml, and point to that partial instead.
@@ -25,18 +25,12 @@
25
25
  # github.com/rails/rails/commit/123eb25#commitcomment-118920
26
26
  # Use ChromeFrame if it's installed for a better experience for the poor IE folk
27
27
 
28
- <IfModule mod_setenvif.c>
29
- <IfModule mod_headers.c>
30
- BrowserMatch MSIE ie
31
- Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie
32
- </IfModule>
33
- </IfModule>
34
-
35
28
  <IfModule mod_headers.c>
36
- # Because X-UA-Compatible isn't sent to non-IE (to save header bytes),
37
- # We need to inform proxies that content changes based on UA
38
- Header append Vary User-Agent
39
- # Cache control is set only if mod_headers is enabled, so that's unncessary to declare
29
+ Header set X-UA-Compatible "IE=Edge,chrome=1"
30
+ # mod_headers can't match by content-type, but we don't want to send this header on *everything*...
31
+ <FilesMatch "\.(js|css|gif|png|jpe?g|pdf|xml|oga|ogg|m4a|ogv|mp4|m4v|webm|svg|svgz|eot|ttf|otf|woff|ico|webp|appcache|manifest|htc|crx|xpi|safariextz|vcf)$" >
32
+ Header unset X-UA-Compatible
33
+ </FilesMatch>
40
34
  </IfModule>
41
35
 
42
36
 
@@ -58,11 +52,11 @@
58
52
  # Webfont access
59
53
  # ----------------------------------------------------------------------
60
54
 
61
- # allow access from all domains for webfonts
62
- # alternatively you could only whitelist
63
- # your subdomains like "sub.domain.com"
55
+ # Allow access from all domains for webfonts.
56
+ # Alternatively you could only whitelist your
57
+ # subdomains like "subdomain.example.com".
64
58
 
65
- <FilesMatch "\.(ttf|otf|eot|woff|font.css)$">
59
+ <FilesMatch "\.(ttf|ttc|otf|eot|woff|font.css)$">
66
60
  <IfModule mod_headers.c>
67
61
  Header set Access-Control-Allow-Origin "*"
68
62
  </IfModule>
@@ -74,26 +68,34 @@
74
68
  # Proper MIME type for all files
75
69
  # ----------------------------------------------------------------------
76
70
 
77
- # audio
71
+
72
+ # JavaScript
73
+ # Normalize to standard type (it's sniffed in IE anyways)
74
+ # tools.ietf.org/html/rfc4329#section-7.2
75
+ AddType application/javascript js
76
+
77
+ # Audio
78
78
  AddType audio/ogg oga ogg
79
+ AddType audio/mp4 m4a
79
80
 
80
- # video
81
+ # Video
81
82
  AddType video/ogg ogv
82
- AddType video/mp4 mp4
83
+ AddType video/mp4 mp4 m4v
83
84
  AddType video/webm webm
84
85
 
85
- # Proper svg serving. Required for svg webfonts on iPad
86
+ # SVG.
87
+ # Required for svg webfonts on iPad
86
88
  # twitter.com/FontSquirrel/status/14855840545
87
89
  AddType image/svg+xml svg svgz
88
90
  AddEncoding gzip svgz
89
91
 
90
- # webfonts
92
+ # Webfonts
91
93
  AddType application/vnd.ms-fontobject eot
92
- AddType font/truetype ttf
94
+ AddType application/x-font-ttf ttf ttc
93
95
  AddType font/opentype otf
94
96
  AddType application/x-font-woff woff
95
97
 
96
- # assorted types
98
+ # Assorted types
97
99
  AddType image/x-icon ico
98
100
  AddType image/webp webp
99
101
  AddType text/cache-manifest appcache manifest
@@ -101,6 +103,7 @@ AddType text/x-component htc
101
103
  AddType application/x-chrome-extension crx
102
104
  AddType application/x-xpinstall xpi
103
105
  AddType application/octet-stream safariextz
106
+ AddType text/x-vcard vcf
104
107
 
105
108
 
106
109
 
@@ -111,54 +114,69 @@ AddType application/octet-stream safariextz
111
114
  # e.g. Inside of script.combined.js you could have
112
115
  # <!--#include file="libs/jquery-1.5.0.min.js" -->
113
116
  # <!--#include file="plugins/jquery.idletimer.js" -->
114
- # and they would be included into this single file
117
+ # and they would be included into this single file.
115
118
 
116
- # this is not in use in the boilerplate as it stands. you may
117
- # choose to name your files in this way for this advantage
118
- # or concatenate and minify them manually.
119
+ # This is not in use in the boilerplate as it stands. You may
120
+ # choose to name your files in this way for this advantage or
121
+ # concatenate and minify them manually.
119
122
  # Disabled by default.
120
123
 
121
- # <FilesMatch "\.combined\.(js|css)$">
122
- # Options +Includes
123
- # SetOutputFilter INCLUDES
124
- # </FilesMatch>
125
-
124
+ #<FilesMatch "\.combined\.js$">
125
+ # Options +Includes
126
+ # AddOutputFilterByType INCLUDES application/javascript application/json
127
+ # SetOutputFilter INCLUDES
128
+ #</FilesMatch>
129
+ #<FilesMatch "\.combined\.css$">
130
+ # Options +Includes
131
+ # AddOutputFilterByType INCLUDES text/css
132
+ # SetOutputFilter INCLUDES
133
+ #</FilesMatch>
126
134
 
127
135
 
128
136
  # ----------------------------------------------------------------------
129
- # gzip compression
137
+ # Gzip compression
130
138
  # ----------------------------------------------------------------------
131
139
 
132
140
  <IfModule mod_deflate.c>
133
141
 
134
-
135
- # force deflate for mangled headers developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping/
142
+ # Force deflate for mangled headers developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping/
136
143
  <IfModule mod_setenvif.c>
137
144
  <IfModule mod_headers.c>
138
- SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s,?\s(gzip|deflate)?|X{4,13}|~{4,13}|-{4,13})$ HAVE_Accept-Encoding
145
+ SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
139
146
  RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
140
147
  </IfModule>
141
148
  </IfModule>
142
- # html, txt, css, js, json, xml, htc:
149
+
150
+ # HTML, TXT, CSS, JavaScript, JSON, XML, HTC:
143
151
  <IfModule filter_module>
144
152
  FilterDeclare COMPRESS
145
- FilterProvider COMPRESS DEFLATE resp=Content-Type /text/(html|css|javascript|plain|x(ml|-component))/
146
- FilterProvider COMPRESS DEFLATE resp=Content-Type /application/(javascript|json|xml|x-javascript)/
153
+ FilterProvider COMPRESS DEFLATE resp=Content-Type $text/html
154
+ FilterProvider COMPRESS DEFLATE resp=Content-Type $text/css
155
+ FilterProvider COMPRESS DEFLATE resp=Content-Type $text/plain
156
+ FilterProvider COMPRESS DEFLATE resp=Content-Type $text/xml
157
+ FilterProvider COMPRESS DEFLATE resp=Content-Type $text/x-component
158
+ FilterProvider COMPRESS DEFLATE resp=Content-Type $application/javascript
159
+ FilterProvider COMPRESS DEFLATE resp=Content-Type $application/json
160
+ FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xml
161
+ FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xhtml+xml
162
+ FilterProvider COMPRESS DEFLATE resp=Content-Type $application/rss+xml
163
+ FilterProvider COMPRESS DEFLATE resp=Content-Type $application/atom+xml
164
+ FilterProvider COMPRESS DEFLATE resp=Content-Type $application/vnd.ms-fontobject
165
+ FilterProvider COMPRESS DEFLATE resp=Content-Type $image/svg+xml
166
+ FilterProvider COMPRESS DEFLATE resp=Content-Type $application/x-font-ttf
167
+ FilterProvider COMPRESS DEFLATE resp=Content-Type $font/opentype
147
168
  FilterChain COMPRESS
148
- FilterProtocol COMPRESS change=yes;byteranges=no
169
+ FilterProtocol COMPRESS DEFLATE change=yes;byteranges=no
149
170
  </IfModule>
150
171
 
151
172
  <IfModule !mod_filter.c>
152
173
  # Legacy versions of Apache
153
174
  AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
154
- AddOutputFilterByType DEFLATE text/javascript application/javascript application/x-javascript
175
+ AddOutputFilterByType DEFLATE application/javascript
155
176
  AddOutputFilterByType DEFLATE text/xml application/xml text/x-component
177
+ AddOutputFilterByType DEFLATE application/xhtml+xml application/rss+xml application/atom+xml
178
+ AddOutputFilterByType DEFLATE image/svg+xml application/vnd.ms-fontobject application/x-font-ttf font/opentype
156
179
  </IfModule>
157
-
158
- # webfonts and svg:
159
- <FilesMatch "\.(ttf|otf|eot|svg)$" >
160
- SetOutputFilter DEFLATE
161
- </FilesMatch>
162
180
  </IfModule>
163
181
 
164
182
 
@@ -167,14 +185,14 @@ AddType application/octet-stream safariextz
167
185
  # Expires headers (for better cache control)
168
186
  # ----------------------------------------------------------------------
169
187
 
170
- # these are pretty far-future expires headers
171
- # they assume you control versioning with cachebusting query params like
188
+ # These are pretty far-future expires headers.
189
+ # They assume you control versioning with cachebusting query params like
172
190
  # <script src="application.js?20100608">
173
- # additionally, consider that outdated proxies may miscache
191
+ # Additionally, consider that outdated proxies may miscache
174
192
  # www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/
175
193
 
176
- # if you don't use filenames to version, lower the css and js to something like
177
- # "access plus 1 week" or so
194
+ # If you don't use filenames to version, lower the CSS and JS to something like
195
+ # "access plus 1 week" or so.
178
196
 
179
197
  <IfModule mod_expires.c>
180
198
  ExpiresActive on
@@ -182,24 +200,25 @@ AddType application/octet-stream safariextz
182
200
  # Perhaps better to whitelist expires rules? Perhaps.
183
201
  ExpiresDefault "access plus 1 month"
184
202
 
185
- # cache.appcache needs re-requests in FF 3.6 (thx Remy ~Introducing HTML5)
203
+ # cache.appcache needs re-requests in FF 3.6 (thanks Remy ~Introducing HTML5)
186
204
  ExpiresByType text/cache-manifest "access plus 0 seconds"
187
205
 
188
- # your document html
206
+ # Your document html
189
207
  ExpiresByType text/html "access plus 0 seconds"
190
208
 
191
- # data
209
+ # Data
192
210
  ExpiresByType text/xml "access plus 0 seconds"
193
211
  ExpiresByType application/xml "access plus 0 seconds"
194
212
  ExpiresByType application/json "access plus 0 seconds"
195
213
 
196
- # rss feed
214
+ # Feed
197
215
  ExpiresByType application/rss+xml "access plus 1 hour"
216
+ ExpiresByType application/atom+xml "access plus 1 hour"
198
217
 
199
- # favicon (cannot be renamed)
218
+ # Favicon (cannot be renamed)
200
219
  ExpiresByType image/x-icon "access plus 1 week"
201
220
 
202
- # media: images, video, audio
221
+ # Media: images, video, audio
203
222
  ExpiresByType image/gif "access plus 1 month"
204
223
  ExpiresByType image/png "access plus 1 month"
205
224
  ExpiresByType image/jpg "access plus 1 month"
@@ -209,20 +228,19 @@ AddType application/octet-stream safariextz
209
228
  ExpiresByType video/mp4 "access plus 1 month"
210
229
  ExpiresByType video/webm "access plus 1 month"
211
230
 
212
- # htc files (css3pie)
231
+ # HTC files (css3pie)
213
232
  ExpiresByType text/x-component "access plus 1 month"
214
233
 
215
- # webfonts
234
+ # Webfonts
216
235
  ExpiresByType font/truetype "access plus 1 month"
217
236
  ExpiresByType font/opentype "access plus 1 month"
218
237
  ExpiresByType application/x-font-woff "access plus 1 month"
219
238
  ExpiresByType image/svg+xml "access plus 1 month"
220
239
  ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
221
240
 
222
- # css and javascript
223
- ExpiresByType text/css "access plus 2 months"
224
- ExpiresByType application/javascript "access plus 2 months"
225
- ExpiresByType text/javascript "access plus 2 months"
241
+ # CSS and JavaScript
242
+ ExpiresByType text/css "access plus 1 year"
243
+ ExpiresByType application/javascript "access plus 1 year"
226
244
 
227
245
  <IfModule mod_headers.c>
228
246
  Header append Cache-Control "public"
@@ -236,6 +254,11 @@ AddType application/octet-stream safariextz
236
254
  # ETag removal
237
255
  # ----------------------------------------------------------------------
238
256
 
257
+ # FileETag None is not enough for every server.
258
+ <IfModule mod_headers.c>
259
+ Header unset ETag
260
+ </IfModule>
261
+
239
262
  # Since we're sending far-future expires, we don't need ETags for
240
263
  # static content.
241
264
  # developer.yahoo.com/performance/rules.html#etags
@@ -278,8 +301,10 @@ FileETag None
278
301
  # ----------------------------------------------------------------------
279
302
 
280
303
  # Turning on the rewrite engine is necessary for the following rules and features.
304
+ # FollowSymLinks must be enabled for this to work.
281
305
 
282
306
  <IfModule mod_rewrite.c>
307
+ Options +FollowSymlinks
283
308
  RewriteEngine On
284
309
  </IfModule>
285
310
 
@@ -303,65 +328,29 @@ FileETag None
303
328
  # ----------------------------------------------------------------------
304
329
 
305
330
  # Option 1:
306
- # Rewrite "www.domain.com -> domain.com"
331
+ # Rewrite "www.example.com -> example.com"
307
332
 
308
333
  <IfModule mod_rewrite.c>
309
334
  RewriteCond %{HTTPS} !=on
310
335
  RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
311
- RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
336
+ RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
312
337
  </IfModule>
313
338
 
314
339
  # ----------------------------------------------------------------------
315
340
 
316
341
  # Option 2:
317
- # To rewrite "domain.com -> www.domain.com" uncomment the following lines.
342
+ # To rewrite "example.com -> www.example.com" uncomment the following lines.
318
343
  # Be aware that the following rule might not be a good idea if you
319
344
  # use "real" subdomains for certain parts of your website.
320
345
 
321
346
  # <IfModule mod_rewrite.c>
322
347
  # RewriteCond %{HTTPS} !=on
323
348
  # RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
324
- # RewriteCond %{HTTP_HOST} (.+)$ [NC]
325
- # RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]
349
+ # RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
326
350
  # </IfModule>
327
351
 
328
352
 
329
353
 
330
- # ----------------------------------------------------------------------
331
- # Add/remove trailing slash to (non-file) URLs
332
- # ----------------------------------------------------------------------
333
-
334
- # Google treats URLs with and without trailing slashes separately.
335
- # Forcing a trailing slash is usually preferred, but all that's really
336
- # important is that one correctly redirects to the other.
337
-
338
- # By default option 1 (force trailing slash) is activated.
339
- # http://googlewebmastercentral.blogspot.com/2010/04/to-slash-or-not-to-slash.html
340
- # http://www.alistapart.com/articles/slashforward/
341
- # http://httpd.apache.org/docs/2.0/misc/rewriteguide.html#url Trailing Slash Problem
342
-
343
- # ----------------------------------------------------------------------
344
-
345
- # Option 1:
346
- # Rewrite "domain.com/foo -> domain.com/foo/"
347
-
348
- <IfModule mod_rewrite.c>
349
- RewriteCond %{REQUEST_FILENAME} !-f
350
- RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/|#(.*))$
351
- RewriteRule ^(.*)$ /$1/ [R=301,L]
352
- </IfModule>
353
-
354
- # ----------------------------------------------------------------------
355
-
356
- # Option 2:
357
- # Rewrite "domain.com/foo/ -> domain.com/foo"
358
-
359
- #<IfModule mod_rewrite.c>
360
- # RewriteRule ^(.*)/$ /$1 [R=301,L]
361
- #</IfModule>
362
-
363
-
364
-
365
354
  # ----------------------------------------------------------------------
366
355
  # Built-in filename-based cache busting
367
356
  # ----------------------------------------------------------------------
@@ -387,12 +376,12 @@ FileETag None
387
376
  # ----------------------------------------------------------------------
388
377
 
389
378
  # Rewrite secure requests properly to prevent SSL cert warnings, e.g. prevent
390
- # https://www.domain.com when your cert only allows https://secure.domain.com
379
+ # https://www.example.com when your cert only allows https://secure.example.com
391
380
  # Uncomment the following lines to use this feature.
392
381
 
393
382
  # <IfModule mod_rewrite.c>
394
383
  # RewriteCond %{SERVER_PORT} !^443
395
- # RewriteRule (.*) https://example-domain-please-change-me.com/$1 [R=301,L]
384
+ # RewriteRule ^ https://example-domain-please-change-me.com%{REQUEST_URI} [R=301,L]
396
385
  # </IfModule>
397
386
 
398
387
 
@@ -409,7 +398,7 @@ Options -MultiViews
409
398
 
410
399
 
411
400
  # ----------------------------------------------------------------------
412
- # custom 404 page
401
+ # Custom 404 page
413
402
  # ----------------------------------------------------------------------
414
403
 
415
404
  # You can add custom pages to handle 500 or 403 pretty easily, if you like.
@@ -421,11 +410,11 @@ ErrorDocument 404 /404.html
421
410
  # UTF-8 encoding
422
411
  # ----------------------------------------------------------------------
423
412
 
424
- # use utf-8 encoding for anything served text/plain or text/html
413
+ # Use UTF-8 encoding for anything served text/plain or text/html
425
414
  AddDefaultCharset utf-8
426
415
 
427
- # force utf-8 for a number of file formats
428
- AddCharset utf-8 .html .css .js .xml .json .rss
416
+ # Force UTF-8 for a number of file formats
417
+ AddCharset utf-8 .html .css .js .xml .json .rss .atom
429
418
 
430
419
 
431
420
 
@@ -470,9 +459,45 @@ Options -Indexes
470
459
 
471
460
  # php_flag register_globals Off
472
461
 
462
+ # Rename session cookie to something else, than PHPSESSID
463
+ # php_value session.name sid
464
+
465
+ # Do not show you are using PHP
466
+ # Note: Move this line to php.ini since it won't work in .htaccess
467
+ # php_flag expose_php Off
468
+
469
+ # Level of log detail - log all errors
470
+ # php_value error_reporting -1
471
+
472
+ # Write errors to log file
473
+ # php_flag log_errors On
474
+
475
+ # Do not display errors in browser (production - Off, development - On)
476
+ # php_flag display_errors Off
477
+
478
+ # Do not display startup errors (production - Off, development - On)
479
+ # php_flag display_startup_errors Off
480
+
481
+ # Format errors in plain text
482
+ # Note: Leave this setting 'On' for xdebug's var_dump() output
483
+ # php_flag html_errors Off
484
+
485
+ # Show multiple occurrence of error
486
+ # php_flag ignore_repeated_errors Off
487
+
488
+ # Show same errors from different sources
489
+ # php_flag ignore_repeated_source Off
490
+
491
+ # Size limit for error messages
492
+ # php_value log_errors_max_len 1024
493
+
494
+ # Don't precede error with string (doesn't accept empty string, use whitespace if you need)
495
+ # php_value error_prepend_string " "
496
+
497
+ # Don't prepend to error (doesn't accept empty string, use whitespace if you need)
498
+ # php_value error_append_string " "
473
499
 
474
500
  # Increase cookie security
475
501
  <IfModule php5_module>
476
- php_value session.cookie_httponly true
502
+ php_value session.cookie_httponly true
477
503
  </IfModule>
478
-