## # This file is part of Contao. # # (c) Leo Feyer # # @license LGPL-3.0-or-later ## ## # 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>