diff --git a/.htaccess_prod b/.htaccess_prod index f9589684..babc9d45 100644 --- a/.htaccess_prod +++ b/.htaccess_prod @@ -2881,6 +2881,109 @@ AddDefaultCharset utf-8 RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L] # End force https + ### Begin: Static File Cache (preparation) #### + + # Document root configuration + RewriteRule .* - [E=SFC_ROOT:%{DOCUMENT_ROOT}] + # RewriteRule .* - [E=SFC_ROOT:%{DOCUMENT_ROOT}/t3site] # Example if your installation is installed in a directory + + # Cleanup URI + RewriteCond %{REQUEST_URI} ^.*$ + RewriteRule .* - [E=SFC_URI:/%{REQUEST_URI}] + RewriteCond %{REQUEST_URI} ^/.*$ + RewriteRule .* - [E=SFC_URI:%{REQUEST_URI}] + RewriteCond %{REQUEST_URI} ^/?$ + RewriteRule .* - [E=SFC_URI:/] + + # Cleanup HOST + RewriteCond %{HTTP_HOST} ^([^:]+)(:[0-9]+)?$ + RewriteRule .* - [E=SFC_HOST:%1] + + # Get scheme + RewriteCond %{SERVER_PORT} ^443$ [OR] + RewriteCond %{HTTP:X-Forwarded-Proto} https + RewriteRule .* - [E=SFC_PROTOCOL:https] + RewriteCond %{SERVER_PORT} !^443$ + RewriteCond %{HTTP:X-Forwarded-Proto} !https + RewriteRule .* - [E=SFC_PROTOCOL:http] + + # Get port (not used at the moment) + RewriteRule .* - [E=SFC_PORT:80] + RewriteCond %{SERVER_PORT} ^[0-9]*$ [OR] + RewriteRule .* - [E=SFC_PORT:%{SERVER_PORT}] + + # Check if the requested file exists in the cache, otherwise default to index.html that + # set in an environment variable that is used later on + RewriteCond %{ENV:SFC_ROOT}/typo3temp/tx_staticfilecache/%{ENV:SFC_PROTOCOL}/%{ENV:SFC_HOST}%{ENV:SFC_URI} !-f + RewriteRule .* - [E=SFC_FILE:index.html] + + # Note: https://github.com/lochmueller/staticfilecache/pull/90 (Please check the realurl configuration related to "appendMissingSlash". Perhaps you need an additional "/" in the rule above) + # RewriteRule .* - [E=SFC_FILE:/index.html] + + # Set gzip extension into an environment variable if the visitors browser can handle gzipped content and the gz-file exists + RewriteRule .* - [E=SFC_GZIP:] + RewriteCond %{HTTP:Accept-Encoding} gzip [NC] + RewriteRule .* - [E=SFC_GZIP:.gz] + RewriteCond %{ENV:SFC_ROOT}/typo3temp/tx_staticfilecache/%{ENV:SFC_PROTOCOL}/%{ENV:SFC_HOST}%{ENV:SFC_URI}%{ENV:SFC_FILE}%{ENV:SFC_GZIP} !-f + RewriteRule .* - [E=SFC_GZIP:] + + # Note: We cannot check realurl "appendMissingSlash" or other BE related settings here - in front of the delivery. + # Perhaps you have to check the "SFC_FILE" value and set it to your related configution e.g. "index.html" (without leading slash). + # More information at: https://github.com/lochmueller/staticfilecache/pull/28 + + ### Begin: Static File Cache (main) #### + + # We only redirect URI's without query strings + RewriteCond %{QUERY_STRING} ^$ + + # It only makes sense to do the other checks if a static file actually exists. + RewriteCond %{ENV:SFC_ROOT}/typo3temp/tx_staticfilecache/%{ENV:SFC_PROTOCOL}/%{ENV:SFC_HOST}%{ENV:SFC_URI}%{ENV:SFC_FILE}%{ENV:SFC_GZIP} -f + + # NO frontend or backend user is logged in. Logged in users may see different + # information than anonymous users. But the anonymous version is cached. So + # don't show the anonymous version to logged in users. + RewriteCond %{HTTP_COOKIE} !staticfilecache [NC] + + # Uncomment the following line if you use MnoGoSearch + #RewriteCond %{HTTP:X-TYPO3-mnogosearch} ^$ + + # We only redirect GET requests + RewriteCond %{REQUEST_METHOD} GET + + # Rewrite the request to the static file. + RewriteRule .* %{ENV:SFC_ROOT}/typo3temp/tx_staticfilecache/%{ENV:SFC_PROTOCOL}/%{ENV:SFC_HOST}%{ENV:SFC_URI}%{ENV:SFC_FILE}%{ENV:SFC_GZIP} [L] + + # Do not allow direct call the cache entries + RewriteCond %{ENV:SFC_URI} ^/typo3temp/tx_staticfilecache/.* + RewriteCond %{ENV:REDIRECT_STATUS} ^$ + RewriteRule .* - [F,L] + + ### Begin: Static File Cache (options) #### + + # Set proper content type and encoding for gzipped html. + + + Header set Content-Encoding gzip + + + + # if there are same problems with ForceType, please try the AddType alternative + # Set proper content type gzipped html + + ForceType text/html + # AddType "text/html" .gz + + + ForceType text/xml + # AddType "text/xml" .gz + + + ForceType text/xml + # AddType "text/xml" .gz + + + ### End: Static File Cache ### + # Begin TYPO3 default rules RewriteCond $0#%{REQUEST_URI} ([^#]*)#(.*)\1$ RewriteRule ^.*$ - [E=CWD:%2] diff --git a/composer.json b/composer.json index 024dad24..2d4cc419 100644 --- a/composer.json +++ b/composer.json @@ -65,7 +65,8 @@ "fluidtypo3/vhs": "^4.3", "webdevops/metaseo": "3.0.0", "helhum/typo3-console": "^4.9", - "gridelementsteam/gridelements": "^8.2" + "gridelementsteam/gridelements": "^8.2", + "lochmueller/staticfilecache": "^6.1" }, "scripts": { "typo3-cms-scripts": [ diff --git a/composer.lock b/composer.lock index 66b83bd1..4414db7e 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "5f4841fc9f952af0dcb544320b4a975f", + "content-hash": "704a682f0763cbf02432d1c508b9cd17", "packages": [ { "name": "christophlehmann/imageoptimizer", @@ -1322,6 +1322,76 @@ ], "time": "2013-03-15T13:16:35+00:00" }, + { + "name": "lochmueller/staticfilecache", + "version": "6.1.0", + "source": { + "type": "git", + "url": "https://github.com/lochmueller/staticfilecache.git", + "reference": "ba7c92ffce903a89068971aa4c9428fe80193f3a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lochmueller/staticfilecache/zipball/ba7c92ffce903a89068971aa4c9428fe80193f3a", + "reference": "ba7c92ffce903a89068971aa4c9428fe80193f3a", + "shasum": "" + }, + "require": { + "ext-pdo": "*", + "ext-zlib": "*", + "php": ">=7.0.0", + "typo3/cms-core": "~8.7.0||~9.4.0||~9.5.0||dev-master" + }, + "replace": { + "staticfilecache": "self.version", + "typo3-ter/staticfilecache": "self.version" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.12", + "phpmd/phpmd": "^2.6", + "phpmetrics/phpmetrics": "^2.4", + "scrutinizer/ocular": "^1.3.0", + "squizlabs/php_codesniffer": "^3.3", + "typo3/testing-framework": "~2.0.4||~4.2.0" + }, + "suggest": { + "aoepeople/crawler": "For crawling the site and warmup the cache", + "friendsofsymfony/http-cache": "For HTTP proxy cache services like Varnish" + }, + "type": "typo3-cms-extension", + "extra": { + "typo3/cms": { + "cms-package-dir": "{$vendor-dir}/typo3/cms", + "web-dir": ".Build/Web" + } + }, + "autoload": { + "psr-4": { + "SFC\\Staticfilecache\\": "Classes" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Tim Lochmüller", + "email": "tim@fruit-lab.de", + "homepage": "https://github.com/lochmueller", + "role": "Developer" + } + ], + "description": "Transparent static file cache solution using mod_rewrite and mod_expires. Increase performance for static pages by a factor of 230!!", + "homepage": "https://github.com/lochmueller/staticfilecache", + "keywords": [ + "Static file cache", + "TYPO3 CMS", + "magic", + "speed" + ], + "time": "2018-09-20T16:58:53+00:00" + }, { "name": "matthiasmullie/minify", "version": "1.3.60", diff --git a/web/.htaccess b/web/.htaccess index fe3f387e..50fed061 100644 --- a/web/.htaccess +++ b/web/.htaccess @@ -305,6 +305,109 @@ AddDefaultCharset utf-8 # NOTE: Add your additional local storages here RewriteRule ^(?:typo3/|fileadmin/|typo3conf/|typo3temp/|uploads/|favicon\.ico) - [L] + ### Begin: Static File Cache (preparation) #### + + # Document root configuration + RewriteRule .* - [E=SFC_ROOT:%{DOCUMENT_ROOT}] + # RewriteRule .* - [E=SFC_ROOT:%{DOCUMENT_ROOT}/t3site] # Example if your installation is installed in a directory + + # Cleanup URI + RewriteCond %{REQUEST_URI} ^.*$ + RewriteRule .* - [E=SFC_URI:/%{REQUEST_URI}] + RewriteCond %{REQUEST_URI} ^/.*$ + RewriteRule .* - [E=SFC_URI:%{REQUEST_URI}] + RewriteCond %{REQUEST_URI} ^/?$ + RewriteRule .* - [E=SFC_URI:/] + + # Cleanup HOST + RewriteCond %{HTTP_HOST} ^([^:]+)(:[0-9]+)?$ + RewriteRule .* - [E=SFC_HOST:%1] + + # Get scheme + RewriteCond %{SERVER_PORT} ^443$ [OR] + RewriteCond %{HTTP:X-Forwarded-Proto} https + RewriteRule .* - [E=SFC_PROTOCOL:https] + RewriteCond %{SERVER_PORT} !^443$ + RewriteCond %{HTTP:X-Forwarded-Proto} !https + RewriteRule .* - [E=SFC_PROTOCOL:http] + + # Get port (not used at the moment) + RewriteRule .* - [E=SFC_PORT:80] + RewriteCond %{SERVER_PORT} ^[0-9]*$ [OR] + RewriteRule .* - [E=SFC_PORT:%{SERVER_PORT}] + + # Check if the requested file exists in the cache, otherwise default to index.html that + # set in an environment variable that is used later on + RewriteCond %{ENV:SFC_ROOT}/typo3temp/tx_staticfilecache/%{ENV:SFC_PROTOCOL}/%{ENV:SFC_HOST}%{ENV:SFC_URI} !-f + RewriteRule .* - [E=SFC_FILE:index.html] + + # Note: https://github.com/lochmueller/staticfilecache/pull/90 (Please check the realurl configuration related to "appendMissingSlash". Perhaps you need an additional "/" in the rule above) + # RewriteRule .* - [E=SFC_FILE:/index.html] + + # Set gzip extension into an environment variable if the visitors browser can handle gzipped content and the gz-file exists + RewriteRule .* - [E=SFC_GZIP:] + RewriteCond %{HTTP:Accept-Encoding} gzip [NC] + RewriteRule .* - [E=SFC_GZIP:.gz] + RewriteCond %{ENV:SFC_ROOT}/typo3temp/tx_staticfilecache/%{ENV:SFC_PROTOCOL}/%{ENV:SFC_HOST}%{ENV:SFC_URI}%{ENV:SFC_FILE}%{ENV:SFC_GZIP} !-f + RewriteRule .* - [E=SFC_GZIP:] + + # Note: We cannot check realurl "appendMissingSlash" or other BE related settings here - in front of the delivery. + # Perhaps you have to check the "SFC_FILE" value and set it to your related configution e.g. "index.html" (without leading slash). + # More information at: https://github.com/lochmueller/staticfilecache/pull/28 + + ### Begin: Static File Cache (main) #### + + # We only redirect URI's without query strings + RewriteCond %{QUERY_STRING} ^$ + + # It only makes sense to do the other checks if a static file actually exists. + RewriteCond %{ENV:SFC_ROOT}/typo3temp/tx_staticfilecache/%{ENV:SFC_PROTOCOL}/%{ENV:SFC_HOST}%{ENV:SFC_URI}%{ENV:SFC_FILE}%{ENV:SFC_GZIP} -f + + # NO frontend or backend user is logged in. Logged in users may see different + # information than anonymous users. But the anonymous version is cached. So + # don't show the anonymous version to logged in users. + RewriteCond %{HTTP_COOKIE} !staticfilecache [NC] + + # Uncomment the following line if you use MnoGoSearch + #RewriteCond %{HTTP:X-TYPO3-mnogosearch} ^$ + + # We only redirect GET requests + RewriteCond %{REQUEST_METHOD} GET + + # Rewrite the request to the static file. + RewriteRule .* %{ENV:SFC_ROOT}/typo3temp/tx_staticfilecache/%{ENV:SFC_PROTOCOL}/%{ENV:SFC_HOST}%{ENV:SFC_URI}%{ENV:SFC_FILE}%{ENV:SFC_GZIP} [L] + + # Do not allow direct call the cache entries + RewriteCond %{ENV:SFC_URI} ^/typo3temp/tx_staticfilecache/.* + RewriteCond %{ENV:REDIRECT_STATUS} ^$ + RewriteRule .* - [F,L] + + ### Begin: Static File Cache (options) #### + + # Set proper content type and encoding for gzipped html. + + + Header set Content-Encoding gzip + + + + # if there are same problems with ForceType, please try the AddType alternative + # Set proper content type gzipped html + + ForceType text/html + # AddType "text/html" .gz + + + ForceType text/xml + # AddType "text/xml" .gz + + + ForceType text/xml + # AddType "text/xml" .gz + + + ### End: Static File Cache ### + # 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 diff --git a/web/typo3conf/ext/ep_products/ext_localconf.php b/web/typo3conf/ext/ep_products/ext_localconf.php index 55ae777c..64a73fd3 100644 --- a/web/typo3conf/ext/ep_products/ext_localconf.php +++ b/web/typo3conf/ext/ep_products/ext_localconf.php @@ -95,7 +95,7 @@ $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['scheduler']['tasks'][\EP\EpProducts\T 'Product' => 'pricetable', ], [ - 'Product' => 'pricetable', + 'Product' => '', ] );