[TASK] Use TYPO3_SSL for the URL schema enforcement test
[Packages/TYPO3.CMS.git] / _.htaccess
index 7c2e3cb..2890933 100644 (file)
 #####
-# 
-# Example .htaccess file
-# 
+#
+# Example .htaccess file for TYPO3 CMS - for use with Apache Webserver
+#
 # This file includes settings for the following configuration options:
-# 
-# - Compression via TYPO3
-# - Settings for mod_rewrite (URL-Rewriting)
-# - PHP optimisation
-# - Compression using Apache
+#
+# - Compression
+# - Caching
+# - MIME types
+# - Cross Origin requests
+# - Rewriting and Access
 # - Miscellaneous
-# 
-# If you want to use it, you have to copy it to the root folder of your
-# TYPO3 installation and rename it to '.htaccess'.
-# (To make .htaccess files work you might need to adjust the 'AllowOverride'
-# directive in your Apache configuration file.)
-# 
-# IMPORTANT: You may need to change this file depending on your TYPO3
-# installation!
-# Lines starting with a # are treated as comment and ignored by the web
-# server.
-# 
-# You should change every occurance of TYPO3root/ to the location where you
-# have your website in. For example:
-# If you have your website located at http://mysite.com/
-# then your TYPO3root/ is just empty (remove 'TYPO3root/')
-# If you have your website located at http://mysite.com/some/path/
-# then your TYPO3root/ is some/path/ (search and replace)
-# 
-# You can also use this configuration in your httpd.conf, but then you have
-# to modify some lines, see the comments (search for 'httpd.conf')
-# 
-# Using rewriting in your httpd.conf is much faster.
-# 
-# Questions about this file go to the matching Install mailing list,
-# see http://typo3.org/documentation/mailing-lists/
-# 
+# - PHP optimisation
+#
+# If you want to use it, you have to copy it to the root folder of your TYPO3 installation (if its
+# not there already) and rename it to '.htaccess'. To make .htaccess files work, you might need to
+# adjust the 'AllowOverride' directive in your Apache configuration file.
+#
+# IMPORTANT: You may need to change this file depending on your TYPO3 installation!
+#            Consider adding this file's content to your webserver's configuration directly for speed improvement
+#
+# Lots of the options are taken from https://github.com/h5bp/html5-boilerplate/blob/master/dist/.htaccess
+#
 ####
 
 
-### Begin: Compression via TYPO3 ###
+### Begin: Compression ###
 
-# Allow compressed .js and .css files
-# Uncomment the following lines, if you have
-# ['BE']['compressionLevel'] set.
-
-# If the Apache modules mod_gzip or mod_deflate are activated, you should
-# use their compression functions instead.
-# You find an example configuration below.
+# Compressing resource files will save bandwidth and so improve loading speed especially for users
+# with slower internet connections. TYPO3 can compress the .js and .css files for you.
+# *) Uncomment the following lines and
+# *) Set $GLOBALS['TYPO3_CONF_VARS']['BE']['compressionLevel'] = 9 for the Backend
+# *) Set $GLOBALS['TYPO3_CONF_VARS']['FE']['compressionLevel'] = 9 together with the TypoScript properties
+#    config.compressJs and config.compressCss for GZIP compression of Frontend JS and CSS files.
 
 #<FilesMatch "\.js\.gzip$">
-#  AddType "text/javascript" .gzip
+#      AddType "text/javascript" .gzip
 #</FilesMatch>
 #<FilesMatch "\.css\.gzip$">
-#  AddType "text/css" .gzip
+#      AddType "text/css" .gzip
 #</FilesMatch>
 #AddEncoding gzip .gzip
 
-### End: Compression via TYPO3 ###
+<IfModule mod_deflate.c>
+       # Force compression for mangled `Accept-Encoding` request headers
+       <IfModule mod_setenvif.c>
+               <IfModule mod_headers.c>
+                       SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
+                       RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
+               </IfModule>
+       </IfModule>
+
+       # Compress all output labeled with one of the following media types.
+       #
+       # (!) For Apache versions below version 2.3.7 you don't need to
+       # enable `mod_filter` and can remove the `<IfModule mod_filter.c>`
+       # and `</IfModule>` lines as `AddOutputFilterByType` is still in
+       # the core directives.
+       #
+       # https://httpd.apache.org/docs/current/mod/mod_filter.html#addoutputfilterbytype
+
+       <IfModule mod_filter.c>
+               AddOutputFilterByType DEFLATE application/atom+xml \
+                       application/javascript \
+                       application/json \
+                       application/ld+json \
+                       application/manifest+json \
+                       application/rdf+xml \
+                       application/rss+xml \
+                       application/schema+json \
+                       application/vnd.geo+json \
+                       application/vnd.ms-fontobject \
+                       application/x-font-ttf \
+                       application/x-javascript \
+                       application/x-web-app-manifest+json \
+                       application/xhtml+xml \
+                       application/xml \
+                       font/eot \
+                       font/opentype \
+                       image/bmp \
+                       image/svg+xml \
+                       image/vnd.microsoft.icon \
+                       image/x-icon \
+                       text/cache-manifest \
+                       text/css \
+                       text/html \
+                       text/javascript \
+                       text/plain \
+                       text/vcard \
+                       text/vnd.rim.location.xloc \
+                       text/vtt \
+                       text/x-component \
+                       text/x-cross-domain-policy \
+                       text/xml
+       </IfModule>
+
+       <IfModule mod_mime.c>
+               AddEncoding gzip              svgz
+       </IfModule>
+</IfModule>
 
+### End: Compression ###
 
-### Begin: Settings for mod_rewrite ###
 
-<IfModule mod_rewrite.c>
 
-# Enable URL rewriting
-RewriteEngine On
+### Begin: Browser caching of resource files ###
 
-# If you use an URL-Rewriting extension (RealURL, CoolUri, SimulateStatic),
-# then you have to enable the next line.
-#
-# You have to change this path, if your TYPO3 installation is located
-# in a subdirectory of the website root.
-# 
-# If you place this in httpd.conf, you cannot use this directive in any case!
-#RewriteBase /
-
-# Rule for versioned static files (see $TYPO3_CONF_VARS[BE][versionNumberInFilename]
-# and $TYPO3_CONF_VARS[FE][versionNumberInFilename])
-# IMPORTANT: This rule has to be the very first rule in order to work! 
-RewriteCond %{REQUEST_FILENAME} !-f
-RewriteCond %{REQUEST_FILENAME} !-d
-RewriteRule ^(.+)\.(\d+)\.(php|js|css|png|jpg|gif|gzip)$ $1.$3 [L]
-
-# Stop rewrite processing, if we are in the typo3/ directory.
-# For httpd.conf, use this line instead of the next one:
-# RewriteRule ^/TYPO3root/(typo3/|t3lib/|fileadmin/|typo3conf/|typo3temp/|uploads/|favicon\.ico) - [L]
-RewriteRule ^(typo3/|t3lib/|fileadmin/|typo3conf/|typo3temp/|uploads/|favicon\.ico) - [L]
-
-# Redirect http://mysite/typo3 to http://mysite/typo3/index_re.php
-# and stop the rewrite processing.
-# For httpd.conf, use this line instead of the next one:
-# RewriteRule ^/TYPO3root/typo3$ /TYPO3root/typo3/index.php [L]
-RewriteRule ^typo3$ typo3/index_re.php [L]
-
-# If the file/symlink/directory does not exist => Redirect to index.php.
-# Important note: If you copy/paste this into httpd.conf instead
-# of .htaccess, you need to add '%{DOCUMENT_ROOT}' left to each
-# '%{REQUEST_FILENAME}' part.
-RewriteCond %{REQUEST_FILENAME} !-f
-RewriteCond %{REQUEST_FILENAME} !-d
-RewriteCond %{REQUEST_FILENAME} !-l
-
-# Main URL rewriting.
-
-# If you use Windows and SimulateStaticDocuments does not work, try adding
-# a slash (/) right before 'index.php' below.
-
-# The example shows how to rewrite only *.html and *.pdf files to
-# index.php.
-# This may be helpful when using an extension that can generate PDF files
-# on the fly.
-# Example: RewriteRule .*\.(html|pdf)$ index.php [L]
-
-# For httpd.conf, use this line instead of the next one that has no '#':
-# RewriteRule .* /TYPO3root/index.php [L]
-
-# For use with the RealURL extension, you might need to remove the
-# RewriteBase directive some lines above and use this line instead of the
-# next one:
-# RewriteRule .* /index.php [L]
-
-RewriteRule .* index.php [L]
+# This affects Frontend and Backend and increases performance.
+<IfModule mod_expires.c>
+
+       ExpiresActive on
+       ExpiresDefault                                      "access plus 1 month"
+
+       ExpiresByType text/css                              "access plus 1 year"
+
+       ExpiresByType application/json                      "access plus 0 seconds"
+       ExpiresByType application/ld+json                   "access plus 0 seconds"
+       ExpiresByType application/schema+json               "access plus 0 seconds"
+       ExpiresByType application/vnd.geo+json              "access plus 0 seconds"
+       ExpiresByType application/xml                       "access plus 0 seconds"
+       ExpiresByType text/xml                              "access plus 0 seconds"
+
+       ExpiresByType image/vnd.microsoft.icon              "access plus 1 week"
+       ExpiresByType image/x-icon                          "access plus 1 week"
+
+       ExpiresByType text/x-component                      "access plus 1 month"
+
+       ExpiresByType text/html                             "access plus 0 seconds"
+
+       ExpiresByType application/javascript                "access plus 1 year"
+       ExpiresByType application/x-javascript              "access plus 1 year"
+       ExpiresByType text/javascript                       "access plus 1 year"
+
+       ExpiresByType application/manifest+json             "access plus 1 week"
+       ExpiresByType application/x-web-app-manifest+json   "access plus 0 seconds"
+       ExpiresByType text/cache-manifest                   "access plus 0 seconds"
+
+       ExpiresByType audio/ogg                             "access plus 1 month"
+       ExpiresByType image/bmp                             "access plus 1 month"
+       ExpiresByType image/gif                             "access plus 1 month"
+       ExpiresByType image/jpeg                            "access plus 1 month"
+       ExpiresByType image/png                             "access plus 1 month"
+       ExpiresByType image/svg+xml                         "access plus 1 month"
+       ExpiresByType image/webp                            "access plus 1 month"
+       ExpiresByType video/mp4                             "access plus 1 month"
+       ExpiresByType video/ogg                             "access plus 1 month"
+       ExpiresByType video/webm                            "access plus 1 month"
+
+       ExpiresByType application/atom+xml                  "access plus 1 hour"
+       ExpiresByType application/rdf+xml                   "access plus 1 hour"
+       ExpiresByType application/rss+xml                   "access plus 1 hour"
+
+       ExpiresByType application/vnd.ms-fontobject         "access plus 1 month"
+       ExpiresByType font/eot                              "access plus 1 month"
+       ExpiresByType font/opentype                         "access plus 1 month"
+       ExpiresByType application/x-font-ttf                "access plus 1 month"
+       ExpiresByType application/font-woff                 "access plus 1 month"
+       ExpiresByType application/x-font-woff               "access plus 1 month"
+       ExpiresByType font/woff                             "access plus 1 month"
+       ExpiresByType application/font-woff2                "access plus 1 month"
 
+       ExpiresByType text/x-cross-domain-policy            "access plus 1 week"
+
+</IfModule>
+
+### End: Browser caching of resource files ###
+
+
+### Begin: MIME types ###
+
+# Proper MIME types for all files
+<IfModule mod_mime.c>
+
+       # Data interchange
+       AddType application/atom+xml                        atom
+       AddType application/json                            json map topojson
+       AddType application/ld+json                         jsonld
+       AddType application/rss+xml                         rss
+       AddType application/vnd.geo+json                    geojson
+       AddType application/xml                             rdf xml
+
+       # JavaScript
+       AddType application/javascript                      js
+
+       # Manifest files
+       AddType application/manifest+json                   webmanifest
+       AddType application/x-web-app-manifest+json         webapp
+       AddType text/cache-manifest                         appcache
+
+       # Media files
+
+       AddType audio/mp4                                   f4a f4b m4a
+       AddType audio/ogg                                   oga ogg opus
+       AddType image/bmp                                   bmp
+       AddType image/svg+xml                               svg svgz
+       AddType image/webp                                  webp
+       AddType video/mp4                                   f4v f4p m4v mp4
+       AddType video/ogg                                   ogv
+       AddType video/webm                                  webm
+       AddType video/x-flv                                 flv
+       AddType image/x-icon                                cur ico
+
+       # Web fonts
+       AddType application/font-woff                       woff
+       AddType application/font-woff2                      woff2
+       AddType application/vnd.ms-fontobject               eot
+       AddType application/x-font-ttf                      ttc ttf
+       AddType font/opentype                               otf
+
+       # Other
+       AddType application/octet-stream                    safariextz
+       AddType application/x-bb-appworld                   bbaw
+       AddType application/x-chrome-extension              crx
+       AddType application/x-opera-extension               oex
+       AddType application/x-xpinstall                     xpi
+       AddType text/vcard                                  vcard vcf
+       AddType text/vnd.rim.location.xloc                  xloc
+       AddType text/vtt                                    vtt
+       AddType text/x-component                            htc
+
+</IfModule>
+
+# UTF-8 encoding
+AddDefaultCharset utf-8
+<IfModule mod_mime.c>
+       AddCharset utf-8 .atom .css .js .json .manifest .rdf .rss .vtt .webapp .webmanifest .xml
 </IfModule>
 
-### End: Settings for mod_rewrite ###
+### End: MIME types ###
 
 
-### Begin: PHP optimisation ###
 
-# If you do not change the following settings, the default values will
-# be used.
+### Begin: Cross Origin ###
 
-# TYPO3 works fine with register_globals turned off.
-# This is highly recommended, if your web server has it turned on.
-#php_flag register_globals off
+# Send the CORS header for images when browsers request it.
+<IfModule mod_setenvif.c>
+       <IfModule mod_headers.c>
+               <FilesMatch "\.(bmp|cur|gif|ico|jpe?g|png|svgz?|webp)$">
+                       SetEnvIf Origin ":" IS_CORS
+                       Header set Access-Control-Allow-Origin "*" env=IS_CORS
+               </FilesMatch>
+       </IfModule>
+</IfModule>
+
+# Allow cross-origin access to web fonts.
+<IfModule mod_headers.c>
+       <FilesMatch "\.(eot|otf|tt[cf]|woff2?)$">
+               Header set Access-Control-Allow-Origin "*"
+       </FilesMatch>
+</IfModule>
 
-### End: PHP optimisation ###
+### End: Cross Origin ###
 
 
-### Begin: Compression using Apache ###
 
-# With the following settings you can make Apache compress text files,
-# which will save bandwidth and so improve loading speed especially for
-# users with slower internet connections.
+### Begin: Rewriting and Access ###
 
-# Compressing files for Apache 1.3
-#<IfModule mod_gzip.c>
-#mod_gzip_on Yes
-# There is a problem with Internet Explorer and mod_gzip on Apache servers.
-#mod_gzip_item_exclude file \.css$
-#mod_gzip_item_exclude file \.js$
-# The size of images generally won't be reduced enough that it's worth
-# compressing them.
-#mod_gzip_item_exclude file \.png$
-#mod_gzip_item_exclude file \.gif$
-#mod_gzip_item_exclude file \.jpg$
-#mod_gzip_item_exclude file \.jpeg$
-#</IfModule>
+# You need rewriting, if you use a URL-Rewriting extension (RealURL, CoolUri).
 
-# Compressing files for Apache 2.x
-#<IfModule mod_deflate.c>
-# Compress HTML, Text, CSS, JavaScript and XML files.
-#AddOutputFilterByType DEFLATE text/plain text/html text/xml
-#AddOutputFilterByType DEFLATE text/css text/javascript
-#AddOutputFilterByType DEFLATE application/xml application/xhtml+xml
-#AddOutputFilterByType DEFLATE application/rss+xml
-#AddOutputFilterByType DEFLATE application/javascript application/x-javascript
-# Needed for compatibility with Netscape 4.x, which only supports compression
-# for HTML files, and for Netscape 4.06-4.08, which support no compression.
-#BrowserMatch ^Mozilla/4 gzip-only-text/html
-#BrowserMatch ^Mozilla/4.0[678] no-gzip
-# Activate compression again for MSIE, which masquerades as Netscape.
-# There compression works correctly.
-#BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
-#</IfModule>
+<IfModule mod_rewrite.c>
+
+       # Enable URL rewriting
+       RewriteEngine On
+
+       # Store the current location in an environment variable CWD to use
+       # mod_rewrite in .htaccess files without knowing the RewriteBase
+       RewriteCond $0#%{REQUEST_URI} ([^#]*)#(.*)\1$
+       RewriteRule ^.*$ - [E=CWD:%2]
+
+       # Rules to set ApplicationContext based on hostname
+       #RewriteCond %{HTTP_HOST} ^dev\.example\.com$
+       #RewriteRule .? - [E=TYPO3_CONTEXT:Development]
+       #RewriteCond %{HTTP_HOST} ^staging\.example\.com$
+       #RewriteRule .? - [E=TYPO3_CONTEXT:Production/Staging]
+       #RewriteCond %{HTTP_HOST} ^www\.example\.com$
+       #RewriteRule .? - [E=TYPO3_CONTEXT:Production]
+
+       # Rule for versioned static files, configured through:
+       # - $GLOBALS['TYPO3_CONF_VARS']['BE']['versionNumberInFilename']
+       # - $GLOBALS['TYPO3_CONF_VARS']['FE']['versionNumberInFilename']
+       # IMPORTANT: This rule has to be the very first RewriteCond in order to work!
+       RewriteCond %{REQUEST_FILENAME} !-f
+       RewriteCond %{REQUEST_FILENAME} !-d
+       RewriteRule ^(.+)\.(\d+)\.(php|js|css|png|jpg|gif|gzip)$ %{ENV:CWD}$1.$3 [L]
+
+       # Access block for folders
+       RewriteRule _(?:recycler|temp)_/ - [F]
+       RewriteRule fileadmin/templates/.*\.(?:txt|ts)$ - [F]
+       RewriteRule ^(?:vendor|typo3_src|typo3temp/var) - [F]
+       RewriteRule (?:typo3conf/ext|typo3/sysext|typo3/ext)/[^/]+/(?:Configuration|Resources/Private|Tests?|Documentation|docs?)/ - [F]
+
+       # Block access to all hidden files and directories with the exception of
+       # the visible content from within the `/.well-known/` hidden directory (RFC 5785).
+       RewriteCond %{REQUEST_URI} "!(^|/)\.well-known/([^./]+./?)+$" [NC]
+       RewriteCond %{SCRIPT_FILENAME} -d [OR]
+       RewriteCond %{SCRIPT_FILENAME} -f
+       RewriteRule (?:^|/)\. - [F]
+
+       # Stop rewrite processing, if we are in the typo3/ directory or any other known directory
+       # NOTE: Add your additional local storages here
+       RewriteRule ^(?:typo3/|fileadmin/|typo3conf/|typo3temp/|uploads/|favicon\.ico) - [L]
+
+       # If the file/symlink/directory does not exist => Redirect to index.php.
+       # For httpd.conf, you need to prefix each '%{REQUEST_FILENAME}' with '%{DOCUMENT_ROOT}'.
+       RewriteCond %{REQUEST_FILENAME} !-f
+       RewriteCond %{REQUEST_FILENAME} !-d
+       RewriteCond %{REQUEST_FILENAME} !-l
+       RewriteRule ^.*$ %{ENV:CWD}index.php [QSA,L]
+
+</IfModule>
+
+# Access block for files
+<FilesMatch "(?i:^\.|^#.*#|^(?:ChangeLog|ToDo|Readme|License)(?:\.md|\.txt)?|^composer\.(?:json|lock)|^ext_conf_template\.txt|^ext_typoscript_constants\.txt|^ext_typoscript_setup\.txt|flexform[^.]*\.xml|locallang[^.]*\.(?:xml|xlf)|\.(?:bak|co?nf|cfg|ya?ml|ts|dist|fla|in[ci]|log|sh|sql(?:\..*)?|sw[op]|git.*)|.*(?:~|rc))$">
+       # Apache < 2.3
+       <IfModule !mod_authz_core.c>
+               Order allow,deny
+               Deny from all
+               Satisfy All
+       </IfModule>
+
+       # Apache ≥ 2.3
+       <IfModule mod_authz_core.c>
+               Require all denied
+       </IfModule>
+</FilesMatch>
+
+# Block access to vcs directories
+<IfModule mod_alias.c>
+       RedirectMatch 404 /\.(?:git|svn|hg)/
+</IfModule>
+
+### End: Rewriting and Access ###
 
-### End: Compression using Apache ###
 
 
 ### Begin: Miscellaneous ###
 
+# 404 error prevention for non-existing redirected folders
+Options -MultiViews
+
 # Make sure that directory listings are disabled.
-#Options -Indexes
+<IfModule mod_autoindex.c>
+       Options -Indexes
+</IfModule>
+
+<IfModule mod_headers.c>
+       # Force IE to render pages in the highest available mode
+       Header set X-UA-Compatible "IE=edge"
+       <FilesMatch "\.(appcache|crx|css|eot|gif|htc|ico|jpe?g|js|m4a|m4v|manifest|mp4|oex|oga|ogg|ogv|otf|pdf|png|safariextz|svgz?|ttf|vcf|webapp|webm|webp|woff2?|xml|xpi)$">
+               Header unset X-UA-Compatible
+       </FilesMatch>
+
+       # Reducing MIME type security risks
+       Header set X-Content-Type-Options "nosniff"
+</IfModule>
+
+# ETag removal
+<IfModule mod_headers.c>
+       Header unset ETag
+</IfModule>
+FileETag None
 
 ### End: Miscellaneous ###
 
 
 # Add your own rules here.
-# ...