##
# Contao Open Source CMS
#
# Copyright (c) 2005-2016 Leo Feyer
#
# @license LGPL-3.0+
##

##
# Prevent access to the Contao template files
##
<FilesMatch "\.(tpl|html5|xhtml)$">
  <IfModule !mod_authz_core.c>
    Order deny,allow
    Deny from all
  </IfModule>
  <IfModule mod_authz_core.c>
    Require all denied
  </IfModule>
</FilesMatch>

##
# Allow access from all domains for webfonts
# @see https://github.com/h5bp/html5-boilerplate
##
<IfModule mod_headers.c>
  <FilesMatch "\.(ttf|ttc|otf|eot|woff2?|font\.css)$">
    Header set Access-Control-Allow-Origin "*"
  </FilesMatch>
</IfModule>

##
# Disable ETags
# @see http://developer.yahoo.com/performance/rules.html#etags
##
FileETag None
<IfModule mod_headers.c>
  Header unset ETag
</IfModule>

##
# Set the proper MIME types
# @see https://github.com/h5bp/html5-boilerplate
##
<IfModule mod_mime.c>
  AddType application/javascript              js jsonp
  AddType application/json                    json
  AddType audio/ogg                           oga ogg
  AddType audio/mp4                           m4a f4a f4b
  AddType video/ogg                           ogv
  AddType video/mp4                           mp4 m4v f4v f4p
  AddType video/webm                          webm
  AddType video/x-flv                         flv
  AddType image/svg+xml                       svg svgz
  AddEncoding gzip                            svgz
  AddType application/vnd.ms-fontobject       eot
  AddType application/x-font-ttf              ttf ttc
  AddType font/opentype                       otf
  AddType application/x-font-woff             woff woff2
  AddType image/x-icon                        ico
  AddType image/webp                          webp
  AddType text/cache-manifest                 appcache manifest
  AddType text/x-component                    htc
  AddType application/xml                     rss atom xml rdf
  AddType application/x-web-app-manifest+json webapp
  AddType text/x-vcard                        vcf
  AddType application/x-shockwave-flash       swf
</IfModule>

##
# Gzip compression
# @see https://github.com/h5bp/html5-boilerplate
##
<IfModule mod_deflate.c>
  <IfModule mod_filter.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE text/xml application/xml text/x-component
    AddOutputFilterByType DEFLATE application/xhtml+xml application/rss+xml application/atom+xml
    AddOutputFilterByType DEFLATE image/x-icon image/svg+xml application/vnd.ms-fontobject application/x-font-ttf font/opentype
  </IfModule>
</IfModule>

##
# Expires headers (for better cache control)
# @see https://github.com/h5bp/html5-boilerplate
##
<IfModule mod_expires.c>
  ExpiresActive on

  ##
  # Productional website
  ##
  ExpiresByType text/cache-manifest           "access plus 0 seconds"
  ExpiresByType text/html                     "access plus 0 seconds"
  ExpiresByType text/xml                      "access plus 0 seconds"
  ExpiresByType application/xml               "access plus 0 seconds"
  ExpiresByType application/json              "access plus 0 seconds"
  ExpiresByType application/rss+xml           "access plus 1 hour"
  ExpiresByType application/atom+xml          "access plus 1 hour"
  ExpiresByType image/gif                     "access plus 1 month"
  ExpiresByType image/png                     "access plus 1 month"
  ExpiresByType image/jpeg                    "access plus 1 month"
  ExpiresByType image/x-icon                  "access plus 1 month"
  ExpiresByType video/ogg                     "access plus 1 month"
  ExpiresByType audio/ogg                     "access plus 1 month"
  ExpiresByType video/mp4                     "access plus 1 month"
  ExpiresByType video/webm                    "access plus 1 month"
  ExpiresByType text/x-component              "access plus 1 month"
  ExpiresByType application/x-font-ttf        "access plus 1 month"
  ExpiresByType font/opentype                 "access plus 1 month"
  ExpiresByType application/x-font-woff       "access plus 1 month"
  ExpiresByType image/svg+xml                 "access plus 1 month"
  ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
  ExpiresByType text/css                      "access plus 1 year"
  ExpiresByType application/javascript        "access plus 1 year"

  ##
  # Disable caching during development
  # @see https://github.com/contao/core/issues/4364
  ##
  #ExpiresByType text/cache-manifest           "access"
  #ExpiresByType text/html                     "access"
  #ExpiresByType text/xml                      "access"
  #ExpiresByType application/xml               "access"
  #ExpiresByType application/json              "access"
  #ExpiresByType application/rss+xml           "access"
  #ExpiresByType application/atom+xml          "access"
  #ExpiresByType image/gif                     "access"
  #ExpiresByType image/png                     "access"
  #ExpiresByType image/jpeg                    "access"
  #ExpiresByType image/x-icon                  "access"
  #ExpiresByType video/ogg                     "access"
  #ExpiresByType audio/ogg                     "access"
  #ExpiresByType video/mp4                     "access"
  #ExpiresByType video/webm                    "access"
  #ExpiresByType text/x-component              "access"
  #ExpiresByType application/x-font-ttf        "access"
  #ExpiresByType font/opentype                 "access"
  #ExpiresByType application/x-font-woff       "access"
  #ExpiresByType image/svg+xml                 "access"
  #ExpiresByType application/vnd.ms-fontobject "access"
  #ExpiresByType text/css                      "access"
  #ExpiresByType application/javascript        "access"

</IfModule>

##
# Header adjustments
##
<IfModule mod_headers.c>

  ##
  # Disable caching during development
  # @see https://github.com/contao/core/issues/4364
  ##
  #Header unset Cache-Control
  #Header append Cache-Control must-revalidate

  ##
  # Do not cache the cron.txt file
  # @see https://github.com/contao/core/issues/5105
  ##
  <FilesMatch "cron\.txt$">
    Header set Cache-Control "no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform"
  </FilesMatch>

  ##
  # Add a Vary Accept-Encoding header for the compressed resources. If you
  # modify the file types above, make sure to change them here accordingly.
  # @see http://developer.yahoo.com/performance/rules.html#gzip
  #
  # Note: If you are using a case-sensitive file system like HFS+ or ext4, you
  # have to change the <FilesMatch> directive as follows:
  #
  # <FilesMatch "\.(?i:js|css|xml|gz|svgz)$">
  #
  # For more information see: https://github.com/contao/core/issues/4364
  ##
  <FilesMatch "\.(js|css|xml|gz|svgz)$">
    Header append Vary Accept-Encoding
  </FilesMatch>

  ##
  # Do not cache source map files
  # @see https://github.com/contao/core/issues/8532
  ##
  <FilesMatch "\.map$">
    Header set Expires "0"
    Header set Cache-Control "no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform"
  </FilesMatch>

</IfModule>

##
# Disable MultiViews if you are having issues with requests returning the wrong
# page. Requires AllowOverride Options=All,MultiViews to be set here.
# @see https://github.com/contao/core/issues/3521
##
#Options -MultiViews

##
# URL rewriting
##
<IfModule mod_rewrite.c>
  RewriteEngine On

  ##
  # Change the RewriteBase if your Contao installation is in a subdirectoy and
  # the rewrite rules are not working properly. Usage examples:
  #
  #   RewriteBase /contao-3.0.0
  #   RewriteBase /path/to/contao
  #
  # Depending on your server, you might have to remove the line entirely.
  ##
  RewriteBase /

  ##
  # Uncomment the following lines to add "www." to the domain:
  #
  #   RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
  #   RewriteRule (.*) http://www.example.com/$1 [R=301,L]
  #
  # Uncomment the following lines to remove "www." from the domain:
  #
  #   RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
  #   RewriteRule (.*) http://example.com/$1 [R=301,L]
  #
  # Make sure to replace "example.com" with your domain name.
  ##

  ##
  # If you cannot use mod_deflate, uncomment the following lines to load a
  # compressed .gz version of the aggregated Contao JavaScript and CSS files.
  ##
  #AddEncoding gzip .gz
  #<FilesMatch "\.js\.gz$">
  #  AddType "application/javascript" .gz
  #</FilesMatch>
  #<FilesMatch "\.css\.gz$">
  #  AddType "text/css" .gz
  #</FilesMatch>
  #RewriteCond %{HTTP:Accept-encoding} gzip
  #RewriteCond %{REQUEST_FILENAME} \.(js|css)$
  #RewriteCond %{REQUEST_FILENAME}.gz -f
  #RewriteRule ^(.*)$ $1.gz [QSA,L]

  ##
  # By default, Contao adds ".html" to the generated URLs to simulate static
  # HTML documents. If you change the URL suffix in the back end settings, make
  # sure to change it here accordingly!
  #
  #   RewriteRule .*\.html$ index.php [L]   # URL suffix .html
  #   RewriteRule .*\.txt$ index.php [L]    # URL suffix .txt
  #   RewriteRule .*\.json$ index.php [L]   # URL suffix .json
  #
  # If you do not want to use an URL suffix at all, you have to add a third
  # line to prevent URLs that point to folders from being rewritten (see #4031).
  #
  #   RewriteCond %{REQUEST_FILENAME} !-d
  #   RewriteRule .* index.php [L]
  #
  # If you are using mod_cache, it is recommended to use the RewriteRule below,
  # which adds the query string to the internal URL:
  #
  #   RewriteRule (.*\.html)$ index.php/$1 [L]
  #
  # Note that not all environments support mod_rewrite and mod_cache.
  ##
  RewriteCond %{REQUEST_FILENAME} !\.(htm|php|js|css|map|htc|png|gif|jpe?g|ico|xml|csv|txt|swf|flv|mp4|webm|ogv|mp3|ogg|oga|eot|otf|tt[cf]|woff2?|svgz?|pdf|zip|gz)$
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule .*\.html$ index.php [L]

  ##
  # The following rules are required if you want to pass the language as first
  # URL parameter (added in Contao 2.11). The first rule rewrites the empty URL
  # to the front end controller, the second one adds a missing trailing slash.
  ##
  RewriteRule ^[a-z]{2}(\-[A-Z]{2})?/$ index.php [L]
  RewriteRule ^([a-z]{2}(\-[A-Z]{2})?)$ $1/ [R=301,L]

</IfModule>