TwoToc code
[YouAndWeb_TwoToc] / client / .htaccess
1 # Apache Configuration File
2
3 # (!) Using `.htaccess` files slows down Apache, therefore, if you have access
4 # to the main server config file (usually called `httpd.conf`), you should add
5 # this logic there: http://httpd.apache.org/docs/current/howto/htaccess.html.
6
7 # ##############################################################################
8 # # CROSS-ORIGIN RESOURCE SHARING (CORS)                                       #
9 # ##############################################################################
10
11 # ------------------------------------------------------------------------------
12 # | Cross-domain AJAX requests                                                 |
13 # ------------------------------------------------------------------------------
14
15 # Enable cross-origin AJAX requests.
16 # http://code.google.com/p/html5security/wiki/CrossOriginRequestSecurity
17 # http://enable-cors.org/
18
19 # <IfModule mod_headers.c>
20 #    Header set Access-Control-Allow-Origin "*"
21 # </IfModule>
22
23 # ------------------------------------------------------------------------------
24 # | CORS-enabled images                                                        |
25 # ------------------------------------------------------------------------------
26
27 # Send the CORS header for images when browsers request it.
28 # https://developer.mozilla.org/en/CORS_Enabled_Image
29 # http://blog.chromium.org/2011/07/using-cross-domain-images-in-webgl-and.html
30 # http://hacks.mozilla.org/2011/11/using-cors-to-load-webgl-textures-from-cross-domain-images/
31
32 <IfModule mod_setenvif.c>
33     <IfModule mod_headers.c>
34         <FilesMatch "\.(gif|ico|jpe?g|png|svg|svgz|webp)$">
35             SetEnvIf Origin ":" IS_CORS
36             Header set Access-Control-Allow-Origin "*" env=IS_CORS
37         </FilesMatch>
38     </IfModule>
39 </IfModule>
40
41 # ------------------------------------------------------------------------------
42 # | Web fonts access                                                           |
43 # ------------------------------------------------------------------------------
44
45 # Allow access from all domains for web fonts
46
47 <IfModule mod_headers.c>
48     <FilesMatch "\.(eot|font.css|otf|ttc|ttf|woff)$">
49         Header set Access-Control-Allow-Origin "*"
50     </FilesMatch>
51 </IfModule>
52
53
54 # ##############################################################################
55 # # ERRORS                                                                     #
56 # ##############################################################################
57
58 # ------------------------------------------------------------------------------
59 # | 404 error prevention for non-existing redirected folders                   |
60 # ------------------------------------------------------------------------------
61
62 # Prevent Apache from returning a 404 error for a rewrite if a directory
63 # with the same name does not exist.
64 # http://httpd.apache.org/docs/current/content-negotiation.html#multiviews
65 # http://www.webmasterworld.com/apache/3808792.htm
66
67 Options -MultiViews
68
69 # ------------------------------------------------------------------------------
70 # | Custom error messages / pages                                              |
71 # ------------------------------------------------------------------------------
72
73 # You can customize what Apache returns to the client in case of an error (see
74 # http://httpd.apache.org/docs/current/mod/core.html#errordocument), e.g.:
75
76 ErrorDocument 404 /404.html
77
78
79 # ##############################################################################
80 # # INTERNET EXPLORER                                                          #
81 # ##############################################################################
82
83 # ------------------------------------------------------------------------------
84 # | Better website experience                                                  |
85 # ------------------------------------------------------------------------------
86
87 # Force IE to render pages in the highest available mode in the various
88 # cases when it may not: http://hsivonen.iki.fi/doctype/ie-mode.pdf.
89
90 <IfModule mod_headers.c>
91     Header set X-UA-Compatible "IE=edge"
92     # `mod_headers` can't match based on the content-type, however, we only
93     # want to send this header for HTML pages and not for the other resources
94     <FilesMatch "\.(appcache|crx|css|eot|gif|htc|ico|jpe?g|js|m4a|m4v|manifest|mp4|oex|oga|ogg|ogv|otf|pdf|png|safariextz|svg|svgz|ttf|vcf|webapp|webm|webp|woff|xml|xpi)$">
95         Header unset X-UA-Compatible
96     </FilesMatch>
97 </IfModule>
98
99 # ------------------------------------------------------------------------------
100 # | Cookie setting from iframes                                                |
101 # ------------------------------------------------------------------------------
102
103 # Allow cookies to be set from iframes in IE.
104
105 # <IfModule mod_headers.c>
106 #   Header set P3P "policyref=\"/w3c/p3p.xml\", CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\""
107 # </IfModule>
108
109 # ------------------------------------------------------------------------------
110 # | Screen flicker                                                             |
111 # ------------------------------------------------------------------------------
112
113 # Stop screen flicker in IE on CSS rollovers (this only works in
114 # combination with the `ExpiresByType` directives for images from below).
115
116 # BrowserMatch "MSIE" brokenvary=1
117 # BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1
118 # BrowserMatch "Opera" !brokenvary
119 # SetEnvIf brokenvary 1 force-no-vary
120
121
122 # ##############################################################################
123 # # MIME TYPES AND ENCODING                                                    #
124 # ##############################################################################
125
126 # ------------------------------------------------------------------------------
127 # | Proper MIME types for all files                                            |
128 # ------------------------------------------------------------------------------
129
130 <IfModule mod_mime.c>
131
132   # Audio
133     AddType audio/mp4                                   m4a f4a f4b
134     AddType audio/ogg                                   oga ogg
135
136   # JavaScript
137     # Normalize to standard type (it's sniffed in IE anyways):
138     # http://tools.ietf.org/html/rfc4329#section-7.2
139     AddType application/javascript                      js jsonp
140     AddType application/json                            json
141
142   # Video
143     AddType video/mp4                                   mp4 m4v f4v f4p
144     AddType video/ogg                                   ogv
145     AddType video/webm                                  webm
146     AddType video/x-flv                                 flv
147
148   # Web fonts
149     AddType application/font-woff                       woff
150     AddType application/vnd.ms-fontobject               eot
151
152     # Browsers usually ignore the font MIME types and sniff the content,
153     # however, Chrome shows a warning if other MIME types are used for the
154     # following fonts.
155     AddType application/x-font-ttf                      ttc ttf
156     AddType font/opentype                               otf
157
158     # Make SVGZ fonts work on iPad:
159     # https://twitter.com/FontSquirrel/status/14855840545
160     AddType     image/svg+xml                           svg svgz
161     AddEncoding gzip                                    svgz
162
163   # Other
164     AddType application/octet-stream                    safariextz
165     AddType application/x-chrome-extension              crx
166     AddType application/x-opera-extension               oex
167     AddType application/x-shockwave-flash               swf
168     AddType application/x-web-app-manifest+json         webapp
169     AddType application/x-xpinstall                     xpi
170     AddType application/xml                             atom rdf rss xml
171     AddType image/webp                                  webp
172     AddType image/x-icon                                ico
173     AddType text/cache-manifest                         appcache manifest
174     AddType text/vtt                                    vtt
175     AddType text/x-component                            htc
176     AddType text/x-vcard                                vcf
177
178 </IfModule>
179
180 # ------------------------------------------------------------------------------
181 # | UTF-8 encoding                                                             |
182 # ------------------------------------------------------------------------------
183
184 # Use UTF-8 encoding for anything served as `text/html` or `text/plain`.
185 AddDefaultCharset utf-8
186
187 # Force UTF-8 for certain file formats.
188 <IfModule mod_mime.c>
189     AddCharset utf-8 .atom .css .js .json .rss .vtt .webapp .xml
190 </IfModule>
191
192
193 # ##############################################################################
194 # # URL REWRITES                                                               #
195 # ##############################################################################
196
197 # ------------------------------------------------------------------------------
198 # | Rewrite engine                                                             |
199 # ------------------------------------------------------------------------------
200
201 # Turning on the rewrite engine and enabling the `FollowSymLinks` option is
202 # necessary for the following directives to work.
203
204 # If your web host doesn't allow the `FollowSymlinks` option, you may need to
205 # comment it out and use `Options +SymLinksIfOwnerMatch` but, be aware of the
206 # performance impact: http://httpd.apache.org/docs/current/misc/perf-tuning.html#symlinks
207
208 # Also, some cloud hosting services require `RewriteBase` to be set:
209 # http://www.rackspace.com/knowledge_center/frequently-asked-question/why-is-mod-rewrite-not-working-on-my-site
210
211 <IfModule mod_rewrite.c>
212     Options +FollowSymlinks
213   # Options +SymLinksIfOwnerMatch
214     RewriteEngine On
215   # RewriteBase /
216 </IfModule>
217
218 # ------------------------------------------------------------------------------
219 # | Suppressing / Forcing the "www." at the beginning of URLs                  |
220 # ------------------------------------------------------------------------------
221
222 # The same content should never be available under two different URLs especially
223 # not with and without "www." at the beginning. This can cause SEO problems
224 # (duplicate content), therefore, you should choose one of the alternatives and
225 # redirect the other one.
226
227 # By default option 1 (no "www.") is activated:
228 # http://no-www.org/faq.php?q=class_b
229
230 # If you'd prefer to use option 2, just comment out all the lines from option 1
231 # and uncomment the ones from option 2.
232
233 # IMPORTANT: NEVER USE BOTH RULES AT THE SAME TIME!
234
235 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
236
237 # Option 1: rewrite www.example.com → example.com
238
239 <IfModule mod_rewrite.c>
240     RewriteCond %{HTTPS} !=on
241     RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
242     RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
243 </IfModule>
244
245 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
246
247 # Option 2: rewrite example.com → www.example.com
248
249 # Be aware that the following might not be a good idea if you use "real"
250 # subdomains for certain parts of your website.
251
252 # <IfModule mod_rewrite.c>
253 #    RewriteCond %{HTTPS} !=on
254 #    RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
255 #    RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
256 # </IfModule>
257
258
259 # ##############################################################################
260 # # SECURITY                                                                   #
261 # ##############################################################################
262
263 # ------------------------------------------------------------------------------
264 # | Content Security Policy (CSP)                                              |
265 # ------------------------------------------------------------------------------
266
267 # You can mitigate the risk of cross-site scripting and other content-injection
268 # attacks by setting a Content Security Policy which whitelists trusted sources
269 # of content for your site.
270
271 # The example header below allows ONLY scripts that are loaded from the current
272 # site's origin (no inline scripts, no CDN, etc). This almost certainly won't
273 # work as-is for your site!
274
275 # To get all the details you'll need to craft a reasonable policy for your site,
276 # read: http://html5rocks.com/en/tutorials/security/content-security-policy (or
277 # see the specification: http://w3.org/TR/CSP).
278
279 # <IfModule mod_headers.c>
280 #    Header set Content-Security-Policy "script-src 'self'; object-src 'self'"
281 #    <FilesMatch "\.(appcache|crx|css|eot|gif|htc|ico|jpe?g|js|m4a|m4v|manifest|mp4|oex|oga|ogg|ogv|otf|pdf|png|safariextz|svg|svgz|ttf|vcf|webapp|webm|webp|woff|xml|xpi)$">
282 #        Header unset Content-Security-Policy
283 #    </FilesMatch>
284 # </IfModule>
285
286 # ------------------------------------------------------------------------------
287 # | File access                                                                |
288 # ------------------------------------------------------------------------------
289
290 # Block access to directories without a default document.
291 # Usually you should leave this uncommented because you shouldn't allow anyone
292 # to surf through every directory on your server (which may includes rather
293 # private places like the CMS's directories).
294
295 <IfModule mod_autoindex.c>
296     Options -Indexes
297 </IfModule>
298
299 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
300
301 # Block access to hidden files and directories.
302 # This includes directories used by version control systems such as Git and SVN.
303
304 <IfModule mod_rewrite.c>
305     RewriteCond %{SCRIPT_FILENAME} -d [OR]
306     RewriteCond %{SCRIPT_FILENAME} -f
307     RewriteRule "(^|/)\." - [F]
308 </IfModule>
309
310 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
311
312 # Block access to backup and source files.
313 # These files may be left by some text editors and can pose a great security
314 # danger when anyone has access to them.
315
316 <FilesMatch "(^#.*#|\.(bak|config|dist|fla|inc|ini|log|psd|sh|sql|sw[op])|~)$">
317     Order allow,deny
318     Deny from all
319     Satisfy All
320 </FilesMatch>
321
322 # ------------------------------------------------------------------------------
323 # | Secure Sockets Layer (SSL)                                                 |
324 # ------------------------------------------------------------------------------
325
326 # Rewrite secure requests properly to prevent SSL certificate warnings, e.g.:
327 # prevent `https://www.example.com` when your certificate only allows
328 # `https://secure.example.com`.
329
330 # <IfModule mod_rewrite.c>
331 #    RewriteCond %{SERVER_PORT} !^443
332 #    RewriteRule ^ https://example-domain-please-change-me.com%{REQUEST_URI} [R=301,L]
333 # </IfModule>
334
335 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
336
337 # Force client-side SSL redirection.
338
339 # If a user types "example.com" in his browser, the above rule will redirect him
340 # to the secure version of the site. That still leaves a window of opportunity
341 # (the initial HTTP connection) for an attacker to downgrade or redirect the
342 # request. The following header ensures that browser will ONLY connect to your
343 # server via HTTPS, regardless of what the users type in the address bar.
344 # http://www.html5rocks.com/en/tutorials/security/transport-layer-security/
345
346 # <IfModule mod_headers.c>
347 #    Header set Strict-Transport-Security max-age=16070400;
348 # </IfModule>
349
350 # ------------------------------------------------------------------------------
351 # | Server software information                                                |
352 # ------------------------------------------------------------------------------
353
354 # Avoid displaying the exact Apache version number, the description of the
355 # generic OS-type and the information about Apache's compiled-in modules.
356
357 # ADD THIS DIRECTIVE IN THE `httpd.conf` AS IT WILL NOT WORK IN THE `.htaccess`!
358
359 # ServerTokens Prod
360
361
362 # ##############################################################################
363 # # WEB PERFORMANCE                                                            #
364 # ##############################################################################
365
366 # ------------------------------------------------------------------------------
367 # | Compression                                                                |
368 # ------------------------------------------------------------------------------
369
370 <IfModule mod_deflate.c>
371
372     # Force compression for mangled headers.
373     # http://developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping
374     <IfModule mod_setenvif.c>
375         <IfModule mod_headers.c>
376             SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
377             RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
378         </IfModule>
379     </IfModule>
380
381     # Compress all output labeled with one of the following MIME-types
382     # (for Apache versions below 2.3.7, you don't need to enable `mod_filter`
383     #  and can remove the `<IfModule mod_filter.c>` and `</IfModule>` lines
384     #  as `AddOutputFilterByType` is still in the core directives).
385     <IfModule mod_filter.c>
386         AddOutputFilterByType DEFLATE application/atom+xml \
387                                       application/javascript \
388                                       application/json \
389                                       application/rss+xml \
390                                       application/vnd.ms-fontobject \
391                                       application/x-font-ttf \
392                                       application/x-web-app-manifest+json \
393                                       application/xhtml+xml \
394                                       application/xml \
395                                       font/opentype \
396                                       image/svg+xml \
397                                       image/x-icon \
398                                       text/css \
399                                       text/html \
400                                       text/plain \
401                                       text/x-component \
402                                       text/xml
403     </IfModule>
404
405 </IfModule>
406
407 # ------------------------------------------------------------------------------
408 # | Content transformations                                                    |
409 # ------------------------------------------------------------------------------
410
411 # Prevent some of the mobile network providers from modifying the content of
412 # your site: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.5.
413
414 # <IfModule mod_headers.c>
415 #    Header set Cache-Control "no-transform"
416 # </IfModule>
417
418 # ------------------------------------------------------------------------------
419 # | ETag removal                                                               |
420 # ------------------------------------------------------------------------------
421
422 # Since we're sending far-future expires headers (see below), ETags can
423 # be removed: http://developer.yahoo.com/performance/rules.html#etags.
424
425 # `FileETag None` is not enough for every server.
426 <IfModule mod_headers.c>
427     Header unset ETag
428 </IfModule>
429
430 FileETag None
431
432 # ------------------------------------------------------------------------------
433 # | Expires headers (for better cache control)                                 |
434 # ------------------------------------------------------------------------------
435
436 # The following expires headers are set pretty far in the future. If you don't
437 # control versioning with filename-based cache busting, consider lowering the
438 # cache time for resources like CSS and JS to something like 1 week.
439
440 <IfModule mod_expires.c>
441
442     ExpiresActive on
443     ExpiresDefault                                      "access plus 1 month"
444
445   # CSS
446     ExpiresByType text/css                              "access plus 1 year"
447
448   # Data interchange
449     ExpiresByType application/json                      "access plus 0 seconds"
450     ExpiresByType application/xml                       "access plus 0 seconds"
451     ExpiresByType text/xml                              "access plus 0 seconds"
452
453   # Favicon (cannot be renamed!)
454     ExpiresByType image/x-icon                          "access plus 1 week"
455
456   # HTML components (HTCs)
457     ExpiresByType text/x-component                      "access plus 1 month"
458
459   # HTML
460     ExpiresByType text/html                             "access plus 0 seconds"
461
462   # JavaScript
463     ExpiresByType application/javascript                "access plus 1 year"
464
465   # Manifest files
466     ExpiresByType application/x-web-app-manifest+json   "access plus 0 seconds"
467     ExpiresByType text/cache-manifest                   "access plus 0 seconds"
468
469   # Media
470     ExpiresByType audio/ogg                             "access plus 1 month"
471     ExpiresByType image/gif                             "access plus 1 month"
472     ExpiresByType image/jpeg                            "access plus 1 month"
473     ExpiresByType image/png                             "access plus 1 month"
474     ExpiresByType video/mp4                             "access plus 1 month"
475     ExpiresByType video/ogg                             "access plus 1 month"
476     ExpiresByType video/webm                            "access plus 1 month"
477
478   # Web feeds
479     ExpiresByType application/atom+xml                  "access plus 1 hour"
480     ExpiresByType application/rss+xml                   "access plus 1 hour"
481
482   # Web fonts
483     ExpiresByType application/font-woff                 "access plus 1 month"
484     ExpiresByType application/vnd.ms-fontobject         "access plus 1 month"
485     ExpiresByType application/x-font-ttf                "access plus 1 month"
486     ExpiresByType font/opentype                         "access plus 1 month"
487     ExpiresByType image/svg+xml                         "access plus 1 month"
488
489 </IfModule>
490
491 # ------------------------------------------------------------------------------
492 # | Filename-based cache busting                                               |
493 # ------------------------------------------------------------------------------
494
495 # If you're not using a build process to manage your filename version revving,
496 # you might want to consider enabling the following directives to route all
497 # requests such as `/css/style.12345.css` to `/css/style.css`.
498
499 # To understand why this is important and a better idea than `*.css?v231`, read:
500 # http://stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring
501
502 # <IfModule mod_rewrite.c>
503 #    RewriteCond %{REQUEST_FILENAME} !-f
504 #    RewriteCond %{REQUEST_FILENAME} !-d
505 #    RewriteRule ^(.+)\.(\d+)\.(js|css|png|jpg|gif)$ $1.$3 [L]
506 # </IfModule>
507
508 # ------------------------------------------------------------------------------
509 # | File concatenation                                                         |
510 # ------------------------------------------------------------------------------
511
512 # Allow concatenation from within specific CSS and JS files, e.g.:
513 # Inside of `script.combined.js` you could have
514 #   <!--#include file="libs/jquery.js" -->
515 #   <!--#include file="plugins/jquery.idletimer.js" -->
516 # and they would be included into this single file.
517
518 # <IfModule mod_include.c>
519 #    <FilesMatch "\.combined\.js$">
520 #        Options +Includes
521 #        AddOutputFilterByType INCLUDES application/javascript application/json
522 #        SetOutputFilter INCLUDES
523 #    </FilesMatch>
524 #    <FilesMatch "\.combined\.css$">
525 #        Options +Includes
526 #        AddOutputFilterByType INCLUDES text/css
527 #        SetOutputFilter INCLUDES
528 #    </FilesMatch>
529 # </IfModule>
530
531 # ------------------------------------------------------------------------------
532 # | Persistent connections                                                     |
533 # ------------------------------------------------------------------------------
534
535 # Allow multiple requests to be sent over the same TCP connection:
536 # http://httpd.apache.org/docs/current/en/mod/core.html#keepalive.
537
538 # Enable if you serve a lot of static content but, be aware of the
539 # possible disadvantages!
540
541 # <IfModule mod_headers.c>
542 #    Header set Connection Keep-Alive
543 # </IfModule>