mattery 0.0.1.alpha

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 (51) hide show
  1. checksums.yaml +7 -0
  2. data/.DS_Store +0 -0
  3. data/.gitignore +12 -0
  4. data/.rspec +2 -0
  5. data/.travis.yml +5 -0
  6. data/CODE_OF_CONDUCT.md +74 -0
  7. data/Gemfile +5 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +41 -0
  10. data/Rakefile +6 -0
  11. data/bin/console +14 -0
  12. data/bin/matter +5 -0
  13. data/bin/setup +8 -0
  14. data/lib/matter.rb +36 -0
  15. data/lib/matter/.DS_Store +0 -0
  16. data/lib/matter/cli/application.rb +47 -0
  17. data/lib/matter/version.rb +3 -0
  18. data/matter.gemspec +30 -0
  19. data/matter_source/.DS_Store +0 -0
  20. data/matter_source/.editorconfig +13 -0
  21. data/matter_source/.gitattributes +1 -0
  22. data/matter_source/.gitignore +2 -0
  23. data/matter_source/.htaccess +984 -0
  24. data/matter_source/404.html +60 -0
  25. data/matter_source/LICENSE.txt +7 -0
  26. data/matter_source/apple-touch-icon.png +0 -0
  27. data/matter_source/assets/.DS_Store +0 -0
  28. data/matter_source/assets/css/main.css +271 -0
  29. data/matter_source/assets/css/normalize.css +424 -0
  30. data/matter_source/assets/img/.gitignore +0 -0
  31. data/matter_source/assets/js/.DS_Store +0 -0
  32. data/matter_source/assets/js/main.js +0 -0
  33. data/matter_source/assets/js/vendor/jquery-1.12.0.min.js +5 -0
  34. data/matter_source/assets/js/vendor/modernizr-2.8.3.min.js +4 -0
  35. data/matter_source/browserconfig.xml +12 -0
  36. data/matter_source/crossdomain.xml +15 -0
  37. data/matter_source/doc/TOC.md +29 -0
  38. data/matter_source/doc/css.md +162 -0
  39. data/matter_source/doc/extend.md +663 -0
  40. data/matter_source/doc/faq.md +46 -0
  41. data/matter_source/doc/html.md +227 -0
  42. data/matter_source/doc/js.md +37 -0
  43. data/matter_source/doc/misc.md +178 -0
  44. data/matter_source/doc/usage.md +130 -0
  45. data/matter_source/favicon.ico +0 -0
  46. data/matter_source/humans.txt +15 -0
  47. data/matter_source/index.html +41 -0
  48. data/matter_source/robots.txt +5 -0
  49. data/matter_source/tile-wide.png +0 -0
  50. data/matter_source/tile.png +0 -0
  51. metadata +151 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 15cc4bec2854afb8c726beab8a7ad3d96918bfd2
4
+ data.tar.gz: c96ddef088677a472fdcccf287583792d9842b9d
5
+ SHA512:
6
+ metadata.gz: 875524b5e96d317584516b2663af4183ee156be5c9b2017416092771d15e885a042c0f85fa19a2aa098a4839275493c092dfd73c6cc66278b532e9f1f152057f
7
+ data.tar.gz: 6ae4d51f16cfb98b0addcddc95134464f2e1c908d0a549f026e63602a6231257931f2b10a37723976147260cf598b0ae104dc5becb8344999b19fdedca0d7bb9
data/.DS_Store ADDED
Binary file
data/.gitignore ADDED
@@ -0,0 +1,12 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+
11
+ # rspec failure tracking
12
+ .rspec_status
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.3.0
5
+ before_install: gem install bundler -v 1.14.6
@@ -0,0 +1,74 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ In the interest of fostering an open and welcoming environment, we as
6
+ contributors and maintainers pledge to making participation in our project and
7
+ our community a harassment-free experience for everyone, regardless of age, body
8
+ size, disability, ethnicity, gender identity and expression, level of experience,
9
+ nationality, personal appearance, race, religion, or sexual identity and
10
+ orientation.
11
+
12
+ ## Our Standards
13
+
14
+ Examples of behavior that contributes to creating a positive environment
15
+ include:
16
+
17
+ * Using welcoming and inclusive language
18
+ * Being respectful of differing viewpoints and experiences
19
+ * Gracefully accepting constructive criticism
20
+ * Focusing on what is best for the community
21
+ * Showing empathy towards other community members
22
+
23
+ Examples of unacceptable behavior by participants include:
24
+
25
+ * The use of sexualized language or imagery and unwelcome sexual attention or
26
+ advances
27
+ * Trolling, insulting/derogatory comments, and personal or political attacks
28
+ * Public or private harassment
29
+ * Publishing others' private information, such as a physical or electronic
30
+ address, without explicit permission
31
+ * Other conduct which could reasonably be considered inappropriate in a
32
+ professional setting
33
+
34
+ ## Our Responsibilities
35
+
36
+ Project maintainers are responsible for clarifying the standards of acceptable
37
+ behavior and are expected to take appropriate and fair corrective action in
38
+ response to any instances of unacceptable behavior.
39
+
40
+ Project maintainers have the right and responsibility to remove, edit, or
41
+ reject comments, commits, code, wiki edits, issues, and other contributions
42
+ that are not aligned to this Code of Conduct, or to ban temporarily or
43
+ permanently any contributor for other behaviors that they deem inappropriate,
44
+ threatening, offensive, or harmful.
45
+
46
+ ## Scope
47
+
48
+ This Code of Conduct applies both within project spaces and in public spaces
49
+ when an individual is representing the project or its community. Examples of
50
+ representing a project or community include using an official project e-mail
51
+ address, posting via an official social media account, or acting as an appointed
52
+ representative at an online or offline event. Representation of a project may be
53
+ further defined and clarified by project maintainers.
54
+
55
+ ## Enforcement
56
+
57
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
+ reported by contacting the project team at mm580486@gmail.com. All
59
+ complaints will be reviewed and investigated and will result in a response that
60
+ is deemed necessary and appropriate to the circumstances. The project team is
61
+ obligated to maintain confidentiality with regard to the reporter of an incident.
62
+ Further details of specific enforcement policies may be posted separately.
63
+
64
+ Project maintainers who do not follow or enforce the Code of Conduct in good
65
+ faith may face temporary or permanent repercussions as determined by other
66
+ members of the project's leadership.
67
+
68
+ ## Attribution
69
+
70
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71
+ available at [http://contributor-covenant.org/version/1/4][version]
72
+
73
+ [homepage]: http://contributor-covenant.org
74
+ [version]: http://contributor-covenant.org/version/1/4/
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in matter.gemspec
4
+ gemspec
5
+
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2017 mohammad mahmoudi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,41 @@
1
+ # Matter
2
+
3
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/matter`. To experiment with that code, run `bin/console` for an interactive prompt.
4
+
5
+ TODO: Delete this and the text above, and describe your gem
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'matter'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install matter
22
+
23
+ ## Usage
24
+
25
+ TODO: Write usage instructions here
26
+
27
+ ## Development
28
+
29
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
30
+
31
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
+
33
+ ## Contributing
34
+
35
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/matter. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
36
+
37
+
38
+ ## License
39
+
40
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
41
+
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "matter"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
data/bin/matter ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby -U
2
+ require 'rubygems'
3
+ require "bundler/setup"
4
+ require 'matter'
5
+ Matter::Cli::Application.start( ARGV )
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
data/lib/matter.rb ADDED
@@ -0,0 +1,36 @@
1
+ require "matter/version"
2
+ require 'fileutils'
3
+ require 'yaml'
4
+ require "matter/cli/application"
5
+ module Matter
6
+ def self.root
7
+ File.expand_path '../..', __FILE__
8
+ end
9
+
10
+ class YamlAdaptor
11
+ attr_accessor :filename,:dir
12
+
13
+ def initilize
14
+ end
15
+
16
+ def self.build( filename = 'Matfile' , dir = '.' ,struct)
17
+ @filename=filename
18
+ @dir=dir
19
+ FileUtils.touch("#{@dir}/#{@filename}.yml")
20
+ # config = YAML.load_file("#{@dir}/#{@filename}.yml")
21
+ # puts config['last_update'] #in my file this is set to "some data"
22
+ File.open("#{@dir}/#{@filename}.yml",'w') do |yamlFile|
23
+ yamlFile.write struct.to_yaml
24
+ end
25
+
26
+
27
+ end
28
+
29
+
30
+ end
31
+
32
+
33
+
34
+ end
35
+
36
+
Binary file
@@ -0,0 +1,47 @@
1
+ require 'thor'
2
+
3
+
4
+ module Matter
5
+ module Cli
6
+ class Application < Thor
7
+
8
+ desc 'new Project', 'Build a new project'
9
+ # method_option :project_name, :type => :string,:required => true,
10
+ # :aliases => "-n", :desc => "The name of the project name."
11
+
12
+ def new(project_name)
13
+ FileUtils::mkdir_p project_name
14
+ FileUtils.cp_r "#{Matter.root}/matter_source/.", project_name
15
+ system("git init #{project_name}")
16
+ defaultYaml = { "project_identifire" => project_name.to_s }
17
+
18
+ Matter::YamlAdaptor.build(filename = 'Matfile',dir = project_name.to_s , struct = defaultYaml)
19
+
20
+ end
21
+
22
+ # map %w[--serve -s] => :serve
23
+ # desc "--serve, -s", "Run server"
24
+ # def serve
25
+ # require 'sinatra'
26
+ # get '/' do
27
+ # File.read(File.join('public', 'index.html'))
28
+ # end
29
+ # end
30
+
31
+
32
+
33
+
34
+ map %w[--version -v] => :__print_version
35
+ desc "--version, -v", "print the version"
36
+ def __print_version
37
+ puts Matter::VERSION
38
+ end
39
+
40
+
41
+
42
+
43
+ end
44
+ end
45
+ end
46
+
47
+
@@ -0,0 +1,3 @@
1
+ module Matter
2
+ VERSION = "0.0.1.alpha"
3
+ end
data/matter.gemspec ADDED
@@ -0,0 +1,30 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'matter/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "mattery"
8
+ spec.version = Matter::VERSION
9
+ spec.authors = ["mohammad mahmoudi"]
10
+ spec.email = ["mm580486@gmail.com"]
11
+
12
+ spec.summary = %q{Matter is a great assistant for develop your web app, mac app and win app}
13
+ spec.description = %q{Matter is a great assistant for develop your web app, mac app and win app}
14
+ spec.homepage = "https://gitlab.com/mm580486/matter"
15
+ spec.license = "MIT"
16
+
17
+
18
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
19
+ f.match(%r{^(test|spec|features)/})
20
+ end
21
+ spec.executables = ["matter"]
22
+ # spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
23
+
24
+ spec.require_paths = ["lib"]
25
+ spec.add_dependency 'thor', '~> 0.18'
26
+
27
+ spec.add_development_dependency "bundler", "~> 1.14"
28
+ spec.add_development_dependency "rake", "~> 10.0"
29
+ spec.add_development_dependency "rspec", "~> 3.0"
30
+ end
Binary file
@@ -0,0 +1,13 @@
1
+ # editorconfig.org
2
+
3
+ root = true
4
+
5
+ [*]
6
+ charset = utf-8
7
+ indent_size = 4
8
+ indent_style = space
9
+ insert_final_newline = true
10
+ trim_trailing_whitespace = true
11
+
12
+ [*.md]
13
+ trim_trailing_whitespace = false
@@ -0,0 +1 @@
1
+ * text=auto
@@ -0,0 +1,2 @@
1
+ # Include your project-specific ignores in this file
2
+ # Read about how to use .gitignore: https://help.github.com/articles/ignoring-files
@@ -0,0 +1,984 @@
1
+ # Apache Server Configs v2.14.0 | MIT License
2
+ # https://github.com/h5bp/server-configs-apache
3
+
4
+ # (!) Using `.htaccess` files slows down Apache, therefore, if you have
5
+ # access to the main server configuration file (which is usually called
6
+ # `httpd.conf`), you should add this logic there.
7
+ #
8
+ # https://httpd.apache.org/docs/current/howto/htaccess.html.
9
+
10
+ # ######################################################################
11
+ # # CROSS-ORIGIN #
12
+ # ######################################################################
13
+
14
+ # ----------------------------------------------------------------------
15
+ # | Cross-origin requests |
16
+ # ----------------------------------------------------------------------
17
+
18
+ # Allow cross-origin requests.
19
+ #
20
+ # https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
21
+ # http://enable-cors.org/
22
+ # http://www.w3.org/TR/cors/
23
+
24
+ # <IfModule mod_headers.c>
25
+ # Header set Access-Control-Allow-Origin "*"
26
+ # </IfModule>
27
+
28
+ # ----------------------------------------------------------------------
29
+ # | Cross-origin images |
30
+ # ----------------------------------------------------------------------
31
+
32
+ # Send the CORS header for images when browsers request it.
33
+ #
34
+ # https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image
35
+ # https://blog.chromium.org/2011/07/using-cross-domain-images-in-webgl-and.html
36
+
37
+ <IfModule mod_setenvif.c>
38
+ <IfModule mod_headers.c>
39
+ <FilesMatch "\.(bmp|cur|gif|ico|jpe?g|png|svgz?|webp)$">
40
+ SetEnvIf Origin ":" IS_CORS
41
+ Header set Access-Control-Allow-Origin "*" env=IS_CORS
42
+ </FilesMatch>
43
+ </IfModule>
44
+ </IfModule>
45
+
46
+ # ----------------------------------------------------------------------
47
+ # | Cross-origin web fonts |
48
+ # ----------------------------------------------------------------------
49
+
50
+ # Allow cross-origin access to web fonts.
51
+
52
+ <IfModule mod_headers.c>
53
+ <FilesMatch "\.(eot|otf|tt[cf]|woff2?)$">
54
+ Header set Access-Control-Allow-Origin "*"
55
+ </FilesMatch>
56
+ </IfModule>
57
+
58
+ # ----------------------------------------------------------------------
59
+ # | Cross-origin resource timing |
60
+ # ----------------------------------------------------------------------
61
+
62
+ # Allow cross-origin access to the timing information for all resources.
63
+ #
64
+ # If a resource isn't served with a `Timing-Allow-Origin` header that
65
+ # would allow its timing information to be shared with the document,
66
+ # some of the attributes of the `PerformanceResourceTiming` object will
67
+ # be set to zero.
68
+ #
69
+ # http://www.w3.org/TR/resource-timing/
70
+ # http://www.stevesouders.com/blog/2014/08/21/resource-timing-practical-tips/
71
+
72
+ # <IfModule mod_headers.c>
73
+ # Header set Timing-Allow-Origin: "*"
74
+ # </IfModule>
75
+
76
+
77
+ # ######################################################################
78
+ # # ERRORS #
79
+ # ######################################################################
80
+
81
+ # ----------------------------------------------------------------------
82
+ # | Custom error messages/pages |
83
+ # ----------------------------------------------------------------------
84
+
85
+ # Customize what Apache returns to the client in case of an error.
86
+ # https://httpd.apache.org/docs/current/mod/core.html#errordocument
87
+
88
+ ErrorDocument 404 /404.html
89
+
90
+ # ----------------------------------------------------------------------
91
+ # | Error prevention |
92
+ # ----------------------------------------------------------------------
93
+
94
+ # Disable the pattern matching based on filenames.
95
+ #
96
+ # This setting prevents Apache from returning a 404 error as the result
97
+ # of a rewrite when the directory with the same name does not exist.
98
+ #
99
+ # https://httpd.apache.org/docs/current/content-negotiation.html#multiviews
100
+
101
+ Options -MultiViews
102
+
103
+
104
+ # ######################################################################
105
+ # # INTERNET EXPLORER #
106
+ # ######################################################################
107
+
108
+ # ----------------------------------------------------------------------
109
+ # | Document modes |
110
+ # ----------------------------------------------------------------------
111
+
112
+ # Force Internet Explorer 8/9/10 to render pages in the highest mode
113
+ # available in the various cases when it may not.
114
+ #
115
+ # https://hsivonen.fi/doctype/#ie8
116
+ #
117
+ # (!) Starting with Internet Explorer 11, document modes are deprecated.
118
+ # If your business still relies on older web apps and services that were
119
+ # designed for older versions of Internet Explorer, you might want to
120
+ # consider enabling `Enterprise Mode` throughout your company.
121
+ #
122
+ # https://msdn.microsoft.com/en-us/library/ie/bg182625.aspx#docmode
123
+ # http://blogs.msdn.com/b/ie/archive/2014/04/02/stay-up-to-date-with-enterprise-mode-for-internet-explorer-11.aspx
124
+
125
+ <IfModule mod_headers.c>
126
+
127
+ Header set X-UA-Compatible "IE=edge"
128
+
129
+ # `mod_headers` cannot match based on the content-type, however,
130
+ # the `X-UA-Compatible` response header should be send only for
131
+ # HTML documents and not for the other resources.
132
+
133
+ <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)$">
134
+ Header unset X-UA-Compatible
135
+ </FilesMatch>
136
+
137
+ </IfModule>
138
+
139
+ # ----------------------------------------------------------------------
140
+ # | Iframes cookies |
141
+ # ----------------------------------------------------------------------
142
+
143
+ # Allow cookies to be set from iframes in Internet Explorer.
144
+ #
145
+ # https://msdn.microsoft.com/en-us/library/ms537343.aspx
146
+ # http://www.w3.org/TR/2000/CR-P3P-20001215/
147
+
148
+ # <IfModule mod_headers.c>
149
+ # Header set P3P "policyref=\"/w3c/p3p.xml\", CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\""
150
+ # </IfModule>
151
+
152
+
153
+ # ######################################################################
154
+ # # MEDIA TYPES AND CHARACTER ENCODINGS #
155
+ # ######################################################################
156
+
157
+ # ----------------------------------------------------------------------
158
+ # | Media types |
159
+ # ----------------------------------------------------------------------
160
+
161
+ # Serve resources with the proper media types (f.k.a. MIME types).
162
+ #
163
+ # https://www.iana.org/assignments/media-types/media-types.xhtml
164
+ # https://httpd.apache.org/docs/current/mod/mod_mime.html#addtype
165
+
166
+ <IfModule mod_mime.c>
167
+
168
+ # Data interchange
169
+
170
+ AddType application/atom+xml atom
171
+ AddType application/json json map topojson
172
+ AddType application/ld+json jsonld
173
+ AddType application/rss+xml rss
174
+ AddType application/vnd.geo+json geojson
175
+ AddType application/xml rdf xml
176
+
177
+
178
+ # JavaScript
179
+
180
+ # Normalize to standard type.
181
+ # https://tools.ietf.org/html/rfc4329#section-7.2
182
+
183
+ AddType application/javascript js
184
+
185
+
186
+ # Manifest files
187
+
188
+ AddType application/manifest+json webmanifest
189
+ AddType application/x-web-app-manifest+json webapp
190
+ AddType text/cache-manifest appcache
191
+
192
+
193
+ # Media files
194
+
195
+ AddType audio/mp4 f4a f4b m4a
196
+ AddType audio/ogg oga ogg opus
197
+ AddType image/bmp bmp
198
+ AddType image/svg+xml svg svgz
199
+ AddType image/webp webp
200
+ AddType video/mp4 f4v f4p m4v mp4
201
+ AddType video/ogg ogv
202
+ AddType video/webm webm
203
+ AddType video/x-flv flv
204
+
205
+ # Serving `.ico` image files with a different media type
206
+ # prevents Internet Explorer from displaying then as images:
207
+ # https://github.com/h5bp/html5-boilerplate/commit/37b5fec090d00f38de64b591bcddcb205aadf8ee
208
+
209
+ AddType image/x-icon cur ico
210
+
211
+
212
+ # Web fonts
213
+
214
+ AddType application/font-woff woff
215
+ AddType application/font-woff2 woff2
216
+ AddType application/vnd.ms-fontobject eot
217
+
218
+ # Browsers usually ignore the font media types and simply sniff
219
+ # the bytes to figure out the font type.
220
+ # https://mimesniff.spec.whatwg.org/#matching-a-font-type-pattern
221
+ #
222
+ # However, Blink and WebKit based browsers will show a warning
223
+ # in the console if the following font types are served with any
224
+ # other media types.
225
+
226
+ AddType application/x-font-ttf ttc ttf
227
+ AddType font/opentype otf
228
+
229
+
230
+ # Other
231
+
232
+ AddType application/octet-stream safariextz
233
+ AddType application/x-bb-appworld bbaw
234
+ AddType application/x-chrome-extension crx
235
+ AddType application/x-opera-extension oex
236
+ AddType application/x-xpinstall xpi
237
+ AddType text/vcard vcard vcf
238
+ AddType text/vnd.rim.location.xloc xloc
239
+ AddType text/vtt vtt
240
+ AddType text/x-component htc
241
+
242
+ </IfModule>
243
+
244
+ # ----------------------------------------------------------------------
245
+ # | Character encodings |
246
+ # ----------------------------------------------------------------------
247
+
248
+ # Serve all resources labeled as `text/html` or `text/plain`
249
+ # with the media type `charset` parameter set to `UTF-8`.
250
+ #
251
+ # https://httpd.apache.org/docs/current/mod/core.html#adddefaultcharset
252
+
253
+ AddDefaultCharset utf-8
254
+
255
+ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
256
+
257
+ # Serve the following file types with the media type `charset`
258
+ # parameter set to `UTF-8`.
259
+ #
260
+ # https://httpd.apache.org/docs/current/mod/mod_mime.html#addcharset
261
+
262
+ <IfModule mod_mime.c>
263
+ AddCharset utf-8 .atom \
264
+ .bbaw \
265
+ .css \
266
+ .geojson \
267
+ .js \
268
+ .json \
269
+ .jsonld \
270
+ .manifest \
271
+ .rdf \
272
+ .rss \
273
+ .topojson \
274
+ .vtt \
275
+ .webapp \
276
+ .webmanifest \
277
+ .xloc \
278
+ .xml
279
+ </IfModule>
280
+
281
+
282
+ # ######################################################################
283
+ # # REWRITES #
284
+ # ######################################################################
285
+
286
+ # ----------------------------------------------------------------------
287
+ # | Rewrite engine |
288
+ # ----------------------------------------------------------------------
289
+
290
+ # (1) Turn on the rewrite engine (this is necessary in order for
291
+ # the `RewriteRule` directives to work).
292
+ #
293
+ # https://httpd.apache.org/docs/current/mod/mod_rewrite.html#RewriteEngine
294
+ #
295
+ # (2) Enable the `FollowSymLinks` option if it isn't already.
296
+ #
297
+ # https://httpd.apache.org/docs/current/mod/core.html#options
298
+ #
299
+ # (3) If your web host doesn't allow the `FollowSymlinks` option,
300
+ # you need to comment it out or remove it, and then uncomment
301
+ # the `Options +SymLinksIfOwnerMatch` line (4), but be aware
302
+ # of the performance impact.
303
+ #
304
+ # https://httpd.apache.org/docs/current/misc/perf-tuning.html#symlinks
305
+ #
306
+ # (4) Some cloud hosting services will require you set `RewriteBase`.
307
+ #
308
+ # https://www.rackspace.com/knowledge_center/frequently-asked-question/why-is-modrewrite-not-working-on-my-site
309
+ # https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritebase
310
+ #
311
+ # (5) Depending on how your server is set up, you may also need to
312
+ # use the `RewriteOptions` directive to enable some options for
313
+ # the rewrite engine.
314
+ #
315
+ # https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteoptions
316
+ #
317
+ # (6) Set %{ENV:PROTO} variable, to allow rewrites to redirect with the
318
+ # appropriate schema automatically (http or https).
319
+
320
+ <IfModule mod_rewrite.c>
321
+
322
+ # (1)
323
+ RewriteEngine On
324
+
325
+ # (2)
326
+ Options +FollowSymlinks
327
+
328
+ # (3)
329
+ # Options +SymLinksIfOwnerMatch
330
+
331
+ # (4)
332
+ # RewriteBase /
333
+
334
+ # (5)
335
+ # RewriteOptions <options>
336
+
337
+ # (6)
338
+ RewriteCond %{HTTPS} =on
339
+ RewriteRule ^ - [env=proto:https]
340
+ RewriteCond %{HTTPS} !=on
341
+ RewriteRule ^ - [env=proto:http]
342
+
343
+ </IfModule>
344
+
345
+ # ----------------------------------------------------------------------
346
+ # | Forcing `https://` |
347
+ # ----------------------------------------------------------------------
348
+
349
+ # Redirect from the `http://` to the `https://` version of the URL.
350
+ # https://wiki.apache.org/httpd/RewriteHTTPToHTTPS
351
+
352
+ # <IfModule mod_rewrite.c>
353
+ # RewriteEngine On
354
+ # RewriteCond %{HTTPS} !=on
355
+ # RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
356
+ # </IfModule>
357
+
358
+ # ----------------------------------------------------------------------
359
+ # | Suppressing / Forcing the `www.` at the beginning of URLs |
360
+ # ----------------------------------------------------------------------
361
+
362
+ # The same content should never be available under two different
363
+ # URLs, especially not with and without `www.` at the beginning.
364
+ # This can cause SEO problems (duplicate content), and therefore,
365
+ # you should choose one of the alternatives and redirect the other
366
+ # one.
367
+ #
368
+ # By default `Option 1` (no `www.`) is activated.
369
+ # http://no-www.org/faq.php?q=class_b
370
+ #
371
+ # If you would prefer to use `Option 2`, just comment out all the
372
+ # lines from `Option 1` and uncomment the ones from `Option 2`.
373
+ #
374
+ # (!) NEVER USE BOTH RULES AT THE SAME TIME!
375
+
376
+ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
377
+
378
+ # Option 1: rewrite www.example.com → example.com
379
+
380
+ <IfModule mod_rewrite.c>
381
+ RewriteEngine On
382
+ RewriteCond %{HTTPS} !=on
383
+ RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
384
+ RewriteRule ^ %{ENV:PROTO}://%1%{REQUEST_URI} [R=301,L]
385
+ </IfModule>
386
+
387
+ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
388
+
389
+ # Option 2: rewrite example.com → www.example.com
390
+ #
391
+ # Be aware that the following might not be a good idea if you use "real"
392
+ # subdomains for certain parts of your website.
393
+
394
+ # <IfModule mod_rewrite.c>
395
+ # RewriteEngine On
396
+ # RewriteCond %{HTTPS} !=on
397
+ # RewriteCond %{HTTP_HOST} !^www\. [NC]
398
+ # RewriteCond %{SERVER_ADDR} !=127.0.0.1
399
+ # RewriteCond %{SERVER_ADDR} !=::1
400
+ # RewriteRule ^ %{ENV:PROTO}://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
401
+ # </IfModule>
402
+
403
+
404
+ # ######################################################################
405
+ # # SECURITY #
406
+ # ######################################################################
407
+
408
+ # ----------------------------------------------------------------------
409
+ # | Clickjacking |
410
+ # ----------------------------------------------------------------------
411
+
412
+ # Protect website against clickjacking.
413
+ #
414
+ # The example below sends the `X-Frame-Options` response header with
415
+ # the value `DENY`, informing browsers not to display the content of
416
+ # the web page in any frame.
417
+ #
418
+ # This might not be the best setting for everyone. You should read
419
+ # about the other two possible values the `X-Frame-Options` header
420
+ # field can have: `SAMEORIGIN` and `ALLOW-FROM`.
421
+ # https://tools.ietf.org/html/rfc7034#section-2.1.
422
+ #
423
+ # Keep in mind that while you could send the `X-Frame-Options` header
424
+ # for all of your website’s pages, this has the potential downside that
425
+ # it forbids even non-malicious framing of your content (e.g.: when
426
+ # users visit your website using a Google Image Search results page).
427
+ #
428
+ # Nonetheless, you should ensure that you send the `X-Frame-Options`
429
+ # header for all pages that allow a user to make a state changing
430
+ # operation (e.g: pages that contain one-click purchase links, checkout
431
+ # or bank-transfer confirmation pages, pages that make permanent
432
+ # configuration changes, etc.).
433
+ #
434
+ # Sending the `X-Frame-Options` header can also protect your website
435
+ # against more than just clickjacking attacks:
436
+ # https://cure53.de/xfo-clickjacking.pdf.
437
+ #
438
+ # https://tools.ietf.org/html/rfc7034
439
+ # http://blogs.msdn.com/b/ieinternals/archive/2010/03/30/combating-clickjacking-with-x-frame-options.aspx
440
+ # https://www.owasp.org/index.php/Clickjacking
441
+
442
+ # <IfModule mod_headers.c>
443
+
444
+ # Header set X-Frame-Options "DENY"
445
+
446
+ # # `mod_headers` cannot match based on the content-type, however,
447
+ # # the `X-Frame-Options` response header should be send only for
448
+ # # HTML documents and not for the other resources.
449
+
450
+ # <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)$">
451
+ # Header unset X-Frame-Options
452
+ # </FilesMatch>
453
+
454
+ # </IfModule>
455
+
456
+ # ----------------------------------------------------------------------
457
+ # | Content Security Policy (CSP) |
458
+ # ----------------------------------------------------------------------
459
+
460
+ # Mitigate the risk of cross-site scripting and other content-injection
461
+ # attacks.
462
+ #
463
+ # This can be done by setting a `Content Security Policy` which
464
+ # whitelists trusted sources of content for your website.
465
+ #
466
+ # The example header below allows ONLY scripts that are loaded from
467
+ # the current website's origin (no inline scripts, no CDN, etc).
468
+ # That almost certainly won't work as-is for your website!
469
+ #
470
+ # To make things easier, you can use an online CSP header generator
471
+ # such as: http://cspisawesome.com/.
472
+ #
473
+ # http://content-security-policy.com/
474
+ # http://www.html5rocks.com/en/tutorials/security/content-security-policy/
475
+ # http://www.w3.org/TR/CSP11/).
476
+
477
+ # <IfModule mod_headers.c>
478
+
479
+ # Header set Content-Security-Policy "script-src 'self'; object-src 'self'"
480
+
481
+ # # `mod_headers` cannot match based on the content-type, however,
482
+ # # the `Content-Security-Policy` response header should be send
483
+ # # only for HTML documents and not for the other resources.
484
+
485
+ # <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)$">
486
+ # Header unset Content-Security-Policy
487
+ # </FilesMatch>
488
+
489
+ # </IfModule>
490
+
491
+ # ----------------------------------------------------------------------
492
+ # | File access |
493
+ # ----------------------------------------------------------------------
494
+
495
+ # Block access to directories without a default document.
496
+ #
497
+ # You should leave the following uncommented, as you shouldn't allow
498
+ # anyone to surf through every directory on your server (which may
499
+ # includes rather private places such as the CMS's directories).
500
+
501
+ <IfModule mod_autoindex.c>
502
+ Options -Indexes
503
+ </IfModule>
504
+
505
+ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
506
+
507
+ # Block access to all hidden files and directories with the exception of
508
+ # the visible content from within the `/.well-known/` hidden directory.
509
+ #
510
+ # These types of files usually contain user preferences or the preserved
511
+ # state of an utility, and can include rather private places like, for
512
+ # example, the `.git` or `.svn` directories.
513
+ #
514
+ # The `/.well-known/` directory represents the standard (RFC 5785) path
515
+ # prefix for "well-known locations" (e.g.: `/.well-known/manifest.json`,
516
+ # `/.well-known/keybase.txt`), and therefore, access to its visible
517
+ # content should not be blocked.
518
+ #
519
+ # https://www.mnot.net/blog/2010/04/07/well-known
520
+ # https://tools.ietf.org/html/rfc5785
521
+
522
+ <IfModule mod_rewrite.c>
523
+ RewriteEngine On
524
+ RewriteCond %{REQUEST_URI} "!(^|/)\.well-known/([^./]+./?)+$" [NC]
525
+ RewriteCond %{SCRIPT_FILENAME} -d [OR]
526
+ RewriteCond %{SCRIPT_FILENAME} -f
527
+ RewriteRule "(^|/)\." - [F]
528
+ </IfModule>
529
+
530
+ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
531
+
532
+ # Block access to files that can expose sensitive information.
533
+ #
534
+ # By default, block access to backup and source files that may be
535
+ # left by some text editors and can pose a security risk when anyone
536
+ # has access to them.
537
+ #
538
+ # http://feross.org/cmsploit/
539
+ #
540
+ # (!) Update the `<FilesMatch>` regular expression from below to
541
+ # include any files that might end up on your production server and
542
+ # can expose sensitive information about your website. These files may
543
+ # include: configuration files, files that contain metadata about the
544
+ # project (e.g.: project dependencies), build scripts, etc..
545
+
546
+ <FilesMatch "(^#.*#|\.(bak|conf|dist|fla|in[ci]|log|psd|sh|sql|sw[op])|~)$">
547
+
548
+ # Apache < 2.3
549
+ <IfModule !mod_authz_core.c>
550
+ Order allow,deny
551
+ Deny from all
552
+ Satisfy All
553
+ </IfModule>
554
+
555
+ # Apache ≥ 2.3
556
+ <IfModule mod_authz_core.c>
557
+ Require all denied
558
+ </IfModule>
559
+
560
+ </FilesMatch>
561
+
562
+ # ----------------------------------------------------------------------
563
+ # | HTTP Strict Transport Security (HSTS) |
564
+ # ----------------------------------------------------------------------
565
+
566
+ # Force client-side SSL redirection.
567
+ #
568
+ # If a user types `example.com` in their browser, even if the server
569
+ # redirects them to the secure version of the website, that still leaves
570
+ # a window of opportunity (the initial HTTP connection) for an attacker
571
+ # to downgrade or redirect the request.
572
+ #
573
+ # The following header ensures that browser will ONLY connect to your
574
+ # server via HTTPS, regardless of what the users type in the browser's
575
+ # address bar.
576
+ #
577
+ # (!) Remove the `includeSubDomains` optional directive if the website's
578
+ # subdomains are not using HTTPS.
579
+ #
580
+ # http://www.html5rocks.com/en/tutorials/security/transport-layer-security/
581
+ # https://tools.ietf.org/html/draft-ietf-websec-strict-transport-sec-14#section-6.1
582
+ # http://blogs.msdn.com/b/ieinternals/archive/2014/08/18/hsts-strict-transport-security-attacks-mitigations-deployment-https.aspx
583
+
584
+ # <IfModule mod_headers.c>
585
+ # Header always set Strict-Transport-Security "max-age=16070400; includeSubDomains"
586
+ # </IfModule>
587
+
588
+ # ----------------------------------------------------------------------
589
+ # | Reducing MIME type security risks |
590
+ # ----------------------------------------------------------------------
591
+
592
+ # Prevent some browsers from MIME-sniffing the response.
593
+ #
594
+ # This reduces exposure to drive-by download attacks and cross-origin
595
+ # data leaks, and should be left uncommented, especially if the server
596
+ # is serving user-uploaded content or content that could potentially be
597
+ # treated as executable by the browser.
598
+ #
599
+ # http://www.slideshare.net/hasegawayosuke/owasp-hasegawa
600
+ # http://blogs.msdn.com/b/ie/archive/2008/07/02/ie8-security-part-v-comprehensive-protection.aspx
601
+ # https://msdn.microsoft.com/en-us/library/ie/gg622941.aspx
602
+ # https://mimesniff.spec.whatwg.org/
603
+
604
+ <IfModule mod_headers.c>
605
+ Header set X-Content-Type-Options "nosniff"
606
+ </IfModule>
607
+
608
+ # ----------------------------------------------------------------------
609
+ # | Reflected Cross-Site Scripting (XSS) attacks |
610
+ # ----------------------------------------------------------------------
611
+
612
+ # (1) Try to re-enable the cross-site scripting (XSS) filter built
613
+ # into most web browsers.
614
+ #
615
+ # The filter is usually enabled by default, but in some cases it
616
+ # may be disabled by the user. However, in Internet Explorer for
617
+ # example, it can be re-enabled just by sending the
618
+ # `X-XSS-Protection` header with the value of `1`.
619
+ #
620
+ # (2) Prevent web browsers from rendering the web page if a potential
621
+ # reflected (a.k.a non-persistent) XSS attack is detected by the
622
+ # filter.
623
+ #
624
+ # By default, if the filter is enabled and browsers detect a
625
+ # reflected XSS attack, they will attempt to block the attack
626
+ # by making the smallest possible modifications to the returned
627
+ # web page.
628
+ #
629
+ # Unfortunately, in some browsers (e.g.: Internet Explorer),
630
+ # this default behavior may allow the XSS filter to be exploited,
631
+ # thereby, it's better to inform browsers to prevent the rendering
632
+ # of the page altogether, instead of attempting to modify it.
633
+ #
634
+ # https://hackademix.net/2009/11/21/ies-xss-filter-creates-xss-vulnerabilities
635
+ #
636
+ # (!) Do not rely on the XSS filter to prevent XSS attacks! Ensure that
637
+ # you are taking all possible measures to prevent XSS attacks, the
638
+ # most obvious being: validating and sanitizing your website's inputs.
639
+ #
640
+ # http://blogs.msdn.com/b/ie/archive/2008/07/02/ie8-security-part-iv-the-xss-filter.aspx
641
+ # http://blogs.msdn.com/b/ieinternals/archive/2011/01/31/controlling-the-internet-explorer-xss-filter-with-the-x-xss-protection-http-header.aspx
642
+ # https://www.owasp.org/index.php/Cross-site_Scripting_%28XSS%29
643
+
644
+ # <IfModule mod_headers.c>
645
+
646
+ # # (1) (2)
647
+ # Header set X-XSS-Protection "1; mode=block"
648
+
649
+ # # `mod_headers` cannot match based on the content-type, however,
650
+ # # the `X-XSS-Protection` response header should be send only for
651
+ # # HTML documents and not for the other resources.
652
+
653
+ # <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)$">
654
+ # Header unset X-XSS-Protection
655
+ # </FilesMatch>
656
+
657
+ # </IfModule>
658
+
659
+ # ----------------------------------------------------------------------
660
+ # | Server-side technology information |
661
+ # ----------------------------------------------------------------------
662
+
663
+ # Remove the `X-Powered-By` response header that:
664
+ #
665
+ # * is set by some frameworks and server-side languages
666
+ # (e.g.: ASP.NET, PHP), and its value contains information
667
+ # about them (e.g.: their name, version number)
668
+ #
669
+ # * doesn't provide any value as far as users are concern,
670
+ # and in some cases, the information provided by it can
671
+ # be used by attackers
672
+ #
673
+ # (!) If you can, you should disable the `X-Powered-By` header from the
674
+ # language / framework level (e.g.: for PHP, you can do that by setting
675
+ # `expose_php = off` in `php.ini`)
676
+ #
677
+ # https://php.net/manual/en/ini.core.php#ini.expose-php
678
+
679
+ <IfModule mod_headers.c>
680
+ Header unset X-Powered-By
681
+ </IfModule>
682
+
683
+ # ----------------------------------------------------------------------
684
+ # | Server software information |
685
+ # ----------------------------------------------------------------------
686
+
687
+ # Prevent Apache from adding a trailing footer line containing
688
+ # information about the server to the server-generated documents
689
+ # (e.g.: error messages, directory listings, etc.)
690
+ #
691
+ # https://httpd.apache.org/docs/current/mod/core.html#serversignature
692
+
693
+ ServerSignature Off
694
+
695
+ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
696
+
697
+ # Prevent Apache from sending in the `Server` response header its
698
+ # exact version number, the description of the generic OS-type or
699
+ # information about its compiled-in modules.
700
+ #
701
+ # (!) The `ServerTokens` directive will only work in the main server
702
+ # configuration file, so don't try to enable it in the `.htaccess` file!
703
+ #
704
+ # https://httpd.apache.org/docs/current/mod/core.html#servertokens
705
+
706
+ #ServerTokens Prod
707
+
708
+
709
+ # ######################################################################
710
+ # # WEB PERFORMANCE #
711
+ # ######################################################################
712
+
713
+ # ----------------------------------------------------------------------
714
+ # | Compression |
715
+ # ----------------------------------------------------------------------
716
+
717
+ <IfModule mod_deflate.c>
718
+
719
+ # Force compression for mangled `Accept-Encoding` request headers
720
+ # https://developer.yahoo.com/blogs/ydn/pushing-beyond-gzipping-25601.html
721
+
722
+ <IfModule mod_setenvif.c>
723
+ <IfModule mod_headers.c>
724
+ SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
725
+ RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
726
+ </IfModule>
727
+ </IfModule>
728
+
729
+ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
730
+
731
+ # Compress all output labeled with one of the following media types.
732
+ #
733
+ # (!) For Apache versions below version 2.3.7 you don't need to
734
+ # enable `mod_filter` and can remove the `<IfModule mod_filter.c>`
735
+ # and `</IfModule>` lines as `AddOutputFilterByType` is still in
736
+ # the core directives.
737
+ #
738
+ # https://httpd.apache.org/docs/current/mod/mod_filter.html#addoutputfilterbytype
739
+
740
+ <IfModule mod_filter.c>
741
+ AddOutputFilterByType DEFLATE "application/atom+xml" \
742
+ "application/javascript" \
743
+ "application/json" \
744
+ "application/ld+json" \
745
+ "application/manifest+json" \
746
+ "application/rdf+xml" \
747
+ "application/rss+xml" \
748
+ "application/schema+json" \
749
+ "application/vnd.geo+json" \
750
+ "application/vnd.ms-fontobject" \
751
+ "application/x-font-ttf" \
752
+ "application/x-javascript" \
753
+ "application/x-web-app-manifest+json" \
754
+ "application/xhtml+xml" \
755
+ "application/xml" \
756
+ "font/eot" \
757
+ "font/opentype" \
758
+ "image/bmp" \
759
+ "image/svg+xml" \
760
+ "image/vnd.microsoft.icon" \
761
+ "image/x-icon" \
762
+ "text/cache-manifest" \
763
+ "text/css" \
764
+ "text/html" \
765
+ "text/javascript" \
766
+ "text/plain" \
767
+ "text/vcard" \
768
+ "text/vnd.rim.location.xloc" \
769
+ "text/vtt" \
770
+ "text/x-component" \
771
+ "text/x-cross-domain-policy" \
772
+ "text/xml"
773
+
774
+ </IfModule>
775
+
776
+ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
777
+
778
+ # Map the following filename extensions to the specified
779
+ # encoding type in order to make Apache serve the file types
780
+ # with the appropriate `Content-Encoding` response header
781
+ # (do note that this will NOT make Apache compress them!).
782
+ #
783
+ # If these files types would be served without an appropriate
784
+ # `Content-Enable` response header, client applications (e.g.:
785
+ # browsers) wouldn't know that they first need to uncompress
786
+ # the response, and thus, wouldn't be able to understand the
787
+ # content.
788
+ #
789
+ # https://httpd.apache.org/docs/current/mod/mod_mime.html#addencoding
790
+
791
+ <IfModule mod_mime.c>
792
+ AddEncoding gzip svgz
793
+ </IfModule>
794
+
795
+ </IfModule>
796
+
797
+ # ----------------------------------------------------------------------
798
+ # | Content transformation |
799
+ # ----------------------------------------------------------------------
800
+
801
+ # Prevent intermediate caches or proxies (e.g.: such as the ones
802
+ # used by mobile network providers) from modifying the website's
803
+ # content.
804
+ #
805
+ # https://tools.ietf.org/html/rfc2616#section-14.9.5
806
+ #
807
+ # (!) If you are using `mod_pagespeed`, please note that setting
808
+ # the `Cache-Control: no-transform` response header will prevent
809
+ # `PageSpeed` from rewriting `HTML` files, and, if the
810
+ # `ModPagespeedDisableRewriteOnNoTransform` directive isn't set
811
+ # to `off`, also from rewriting other resources.
812
+ #
813
+ # https://developers.google.com/speed/pagespeed/module/configuration#notransform
814
+
815
+ # <IfModule mod_headers.c>
816
+ # Header merge Cache-Control "no-transform"
817
+ # </IfModule>
818
+
819
+ # ----------------------------------------------------------------------
820
+ # | ETags |
821
+ # ----------------------------------------------------------------------
822
+
823
+ # Remove `ETags` as resources are sent with far-future expires headers.
824
+ #
825
+ # https://developer.yahoo.com/performance/rules.html#etags
826
+ # https://tools.ietf.org/html/rfc7232#section-2.3
827
+
828
+ # `FileETag None` doesn't work in all cases.
829
+ <IfModule mod_headers.c>
830
+ Header unset ETag
831
+ </IfModule>
832
+
833
+ FileETag None
834
+
835
+ # ----------------------------------------------------------------------
836
+ # | Expires headers |
837
+ # ----------------------------------------------------------------------
838
+
839
+ # Serve resources with far-future expires headers.
840
+ #
841
+ # (!) If you don't control versioning with filename-based
842
+ # cache busting, you should consider lowering the cache times
843
+ # to something like one week.
844
+ #
845
+ # https://httpd.apache.org/docs/current/mod/mod_expires.html
846
+
847
+ <IfModule mod_expires.c>
848
+
849
+ ExpiresActive on
850
+ ExpiresDefault "access plus 1 month"
851
+
852
+ # CSS
853
+
854
+ ExpiresByType text/css "access plus 1 year"
855
+
856
+
857
+ # Data interchange
858
+
859
+ ExpiresByType application/atom+xml "access plus 1 hour"
860
+ ExpiresByType application/rdf+xml "access plus 1 hour"
861
+ ExpiresByType application/rss+xml "access plus 1 hour"
862
+
863
+ ExpiresByType application/json "access plus 0 seconds"
864
+ ExpiresByType application/ld+json "access plus 0 seconds"
865
+ ExpiresByType application/schema+json "access plus 0 seconds"
866
+ ExpiresByType application/vnd.geo+json "access plus 0 seconds"
867
+ ExpiresByType application/xml "access plus 0 seconds"
868
+ ExpiresByType text/xml "access plus 0 seconds"
869
+
870
+
871
+ # Favicon (cannot be renamed!) and cursor images
872
+
873
+ ExpiresByType image/vnd.microsoft.icon "access plus 1 week"
874
+ ExpiresByType image/x-icon "access plus 1 week"
875
+
876
+ # HTML
877
+
878
+ ExpiresByType text/html "access plus 0 seconds"
879
+
880
+
881
+ # JavaScript
882
+
883
+ ExpiresByType application/javascript "access plus 1 year"
884
+ ExpiresByType application/x-javascript "access plus 1 year"
885
+ ExpiresByType text/javascript "access plus 1 year"
886
+
887
+
888
+ # Manifest files
889
+
890
+ ExpiresByType application/manifest+json "access plus 1 week"
891
+ ExpiresByType application/x-web-app-manifest+json "access plus 0 seconds"
892
+ ExpiresByType text/cache-manifest "access plus 0 seconds"
893
+
894
+
895
+ # Media files
896
+
897
+ ExpiresByType audio/ogg "access plus 1 month"
898
+ ExpiresByType image/bmp "access plus 1 month"
899
+ ExpiresByType image/gif "access plus 1 month"
900
+ ExpiresByType image/jpeg "access plus 1 month"
901
+ ExpiresByType image/png "access plus 1 month"
902
+ ExpiresByType image/svg+xml "access plus 1 month"
903
+ ExpiresByType image/webp "access plus 1 month"
904
+ ExpiresByType video/mp4 "access plus 1 month"
905
+ ExpiresByType video/ogg "access plus 1 month"
906
+ ExpiresByType video/webm "access plus 1 month"
907
+
908
+
909
+ # Web fonts
910
+
911
+ # Embedded OpenType (EOT)
912
+ ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
913
+ ExpiresByType font/eot "access plus 1 month"
914
+
915
+ # OpenType
916
+ ExpiresByType font/opentype "access plus 1 month"
917
+
918
+ # TrueType
919
+ ExpiresByType application/x-font-ttf "access plus 1 month"
920
+
921
+ # Web Open Font Format (WOFF) 1.0
922
+ ExpiresByType application/font-woff "access plus 1 month"
923
+ ExpiresByType application/x-font-woff "access plus 1 month"
924
+ ExpiresByType font/woff "access plus 1 month"
925
+
926
+ # Web Open Font Format (WOFF) 2.0
927
+ ExpiresByType application/font-woff2 "access plus 1 month"
928
+
929
+
930
+ # Other
931
+
932
+ ExpiresByType text/x-cross-domain-policy "access plus 1 week"
933
+
934
+ </IfModule>
935
+
936
+ # ----------------------------------------------------------------------
937
+ # | File concatenation |
938
+ # ----------------------------------------------------------------------
939
+
940
+ # Allow concatenation from within specific files.
941
+ #
942
+ # e.g.:
943
+ #
944
+ # If you have the following lines in a file called, for
945
+ # example, `main.combined.js`:
946
+ #
947
+ # <!--#include file="js/jquery.js" -->
948
+ # <!--#include file="js/jquery.timer.js" -->
949
+ #
950
+ # Apache will replace those lines with the content of the
951
+ # specified files.
952
+
953
+ # <IfModule mod_include.c>
954
+ # <FilesMatch "\.combined\.js$">
955
+ # Options +Includes
956
+ # AddOutputFilterByType INCLUDES application/javascript \
957
+ # application/x-javascript \
958
+ # text/javascript
959
+ # SetOutputFilter INCLUDES
960
+ # </FilesMatch>
961
+ # <FilesMatch "\.combined\.css$">
962
+ # Options +Includes
963
+ # AddOutputFilterByType INCLUDES text/css
964
+ # SetOutputFilter INCLUDES
965
+ # </FilesMatch>
966
+ # </IfModule>
967
+
968
+ # ----------------------------------------------------------------------
969
+ # | Filename-based cache busting |
970
+ # ----------------------------------------------------------------------
971
+
972
+ # If you're not using a build process to manage your filename version
973
+ # revving, you might want to consider enabling the following directives
974
+ # to route all requests such as `/style.12345.css` to `/style.css`.
975
+ #
976
+ # To understand why this is important and even a better solution than
977
+ # using something like `*.css?v231`, please see:
978
+ # http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/
979
+
980
+ # <IfModule mod_rewrite.c>
981
+ # RewriteEngine On
982
+ # RewriteCond %{REQUEST_FILENAME} !-f
983
+ # RewriteRule ^(.+)\.(\d+)\.(bmp|css|cur|gif|ico|jpe?g|js|png|svgz?|webp|webmanifest)$ $1.$3 [L]
984
+ # </IfModule>