config: TypoScript configuration 

The config top-level object does not have to be initialized. Configuration can be set like this:

config/sites/my_site/setup.typoscript
# TypoScript
config {
    headerComment = Made with ❤ by your TYPO3 Documentation Team
}
Copied!

Table of content

Properties of 'config' 

Properties of the CONFIG object
Name Type
string
numerically indexed array of "HTTP header entries".
boolean
<A>-params
array
boolean
integer
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
string
boolean
target
target
boolean
boolean
string
string / stdWrap
string
integer
boolean
boolean
boolean
boolean
target
list
string
string
boolean
string
boolean
list of PIDs / string
string :Example:setup-config-namespaces
boolean
integer
string
boolean
array
array
array of link configurations
boolean
boolean / string
boolean
auto, force, or empty
boolean
-10 to 10
string
string
array
integer (page id) / keyword "NONE"
string
string
string

absRefPrefix

absRefPrefix
Type
string
Special value
"auto"

If set, this string is prepended to all relative links that TYPO3 generates.

config.absRefPrefix = auto means TYPO3 auto-detects the site root from path prefixes rather than host name variables on the server, making this value safe for multi-domain environments.

If config.forceAbsoluteUrls is enabled absRefPrefix is overridden.

Using an URI in absRefPrefix will require additional conditions if you use different domains for your deployment stages in CI environments.

If you are working on a server where you have different domain names or different path segments leading to the same page (e.g. for internal and external access), set absRefPrefix to the URL and path of your site, e.g. https://example.org/. If you do not, you risk rendering pages to cache from the internal network and thereby prefixing image references and links with incorrect or inaccessible paths.

additionalHeaders

additionalHeaders
Type
numerically indexed array of "HTTP header entries".
Example
set additional headers data

config.additionalHeaders allows additional HTTP headers to be configured. An entry has the following structure:

10.header = the header string
This value is required.
10.replace = 0 | 1
Optional, boolean. Default value is 1. If 1 the header will replace an existing header with the same name.
10.httpResponseCode = 201
Optional, integer. The http status code that the page should return.

By default, TYPO3 sends a "Content-Type" header with the defined encoding. It then sends cache headers if configured via Properties of 'config' and then any additional headers. Finally, a "Content-Length" header is sent, if enabled via Properties of 'config'.

admPanel

admPanel
Type
boolean

config.admPanel = 1 enables the admin panel. See Configuration in the Admin Panel manual.

ATagParams

ATagParams
Type
<A>-params

Additional parameters for all links in TYPO3 (excluding menu-links).

cache

cache
Type
array
Example
config cache examples

Determine the maximum cache lifetime of a page.

The maximum cache lifetime of a page can be determined by start and stop times of content elements on that page, as well as arbitrary records on any other page. The page needs to be configured so that TYPO3 knows which records' start and stop times to take into account. Otherwise, the cache entry might be used although a start/stop date has already passed by.

To include records of type <table name> on page <pid> in the cache lifetime calculation of page <page-id>, add the following TypoScript:

EXT:site_package/Configuration/TypoScript/setup.typoscript
config.cache.<page-id> = <table name>:<storage-pid>
Copied!

Multiple record sources can be added as a comma-separated list. See examples.

Use the keyword "all" instead of a <page-id> to take all records from all pages into account for the cache lifetime calculation.

Use the keyword "current" instead of a <storage-pid> to take only records on the current page into account for the cache lifetime calculation.

cache_clearAtMidnight

cache_clearAtMidnight
Type
boolean
Default
0

This setting ensures that the cache expires at midnight on the day that the page is scheduled to expire.

cache_period

cache_period
Type
integer
Default
86400 (= 24 hours)

The number of seconds a page can remain in the cache.

This value is overridden by the value in the page record field="cache_timeout" if that value is greater than zero.

compressCss

compressCss
Type
boolean
Default
0
Example
Config compress CSS example

If set, CSS files referenced in page.includeCSS, etc, will be minified and compressed. It has no effect on files which are referenced in page.headerData.

Minification will remove excess space. A higher level of compression (using gzip) requires $GLOBALS['TYPO3_CONF_VARS']['FE']['compressionLevel'] to be enabled in the Install Tool. For it to work you also need to activate gzip- related compressionLevel options in .htaccess, otherwise the compressed files will not be readable by the user agent.

TYPO3 comes with a built-in compression handler, but you can also register your own using $GLOBALS['TYPO3_CONF_VARS']['FE']['cssCompressHandler'] .

$GLOBALS['TYPO3_CONF_VARS']['FE']['cssCompressHandler'] =
   \TYPO3\CMS\Core\Extension\ExtensionManager::extPath('my_extension') .
   'Classes/CssCompressHandler.php:MyVendor\MyExtensionen\CssCompressHandler->compressCss';
Copied!

compressJs

compressJs
Type
boolean
Default
0
Example
Config compress JavaScript

Enabling this option together with $GLOBALS['TYPO3_CONF_VARS']['FE']['compressionLevel'] in the Install Tool wil compress frontend JavaScript files referenced in page.includeJS, etc, using GZIP compression. It has no effect on files which are referenced in page.headerData.

Please note that this requires .htaccess to be modified, otherwise the files will not be readable by the user agent. Please see the description of $GLOBALS['TYPO3_CONF_VARS']['FE']['compressionLevel'] in the Install Tool.

TYPO3 comes with a built-in compression handler, but you can also register your own using $GLOBALS['TYPO3_CONF_VARS']['FE']['jsCompressHandler'] .

$GLOBALS['TYPO3_CONF_VARS']['FE']['jsCompressHandler'] =
    \TYPO3\CMS\Core\Extension\ExtensionManager::extPath('my_extension') .
    'Classes/JsCompressHandler.php:MyVendor\MyExtension\JsCompressHandler->compressJs';
Copied!

concatenateCss

concatenateCss
Type
boolean
Default
0
Example
Concatenate CSS Example

Setting config.concatenateCss merges frontend stylesheet files referenced in page.includeCSS, etc. Files are merged only if their media attribute has the same value, e.g. if it is "all" for several files. It has no effect on files which are referenced in page.headerData.

TYPO3 comes with a built-in concatenation handler, but you can also register your own using $GLOBALS['TYPO3_CONF_VARS']['FE']['cssConcatenateHandler'] .

$GLOBALS['TYPO3_CONF_VARS']['FE']['cssCompressHandler'] =
    \TYPO3\CMS\Core\Extension\ExtensionManager::extPath('my_extension') .
    'Classes/CssCompressHandler.php:MyVendor\MyExtension\CssCompressHandler->compressCss';
Copied!

concatenateJs

concatenateJs
Type
boolean
Default
0
Example
concatenateJs

Setting config.concatenateJs merges frontend JavaScript files referenced in page.includeJS, etc. It has no effect on files which are referenced in page.headerData.

If all the files are marked with an async flag, an async attribute is assigned to the script tag.

TYPO3 comes with a built-in concatenation handler, but you can also register your own using $GLOBALS['TYPO3_CONF_VARS']['FE']['jsConcatenateHandler'] .

$GLOBALS['TYPO3_CONF_VARS']['FE']['jsConcatenateHandler'] =
       \TYPO3\CMS\Core\Extension\ExtensionManager::extPath('my_extension') .
       'Classes/JsConcatenateHandler.php:MyVendor\MyExtension\JsConcatenateHandler->concatenateJs';
Copied!

contentObjectExceptionHandler

contentObjectExceptionHandler
Type
boolean
Default
0
Example
:ref: setup-config-contentObjectExceptionHandler

Exceptions which occur during the rendering of content objects (typically plugins) are caught by default in a production context. An error message is displayed with the rendered output.

If there is an exception, the page will remain available while the section of the page that produces the error (i.e. throws an exception) will show a configurable error message. By default the error message contains a random code referencing the exception and the error is logged by the logging framework for developer reference.

To get rid of the error message, the error needs to be fixed and the cache must be cleared for the page.

debug

debug
Type
boolean

If set, debug information for the TypoScript code is sent. This applies to menu objects and parse-time output. The parse-time will be sent in HTTP response header X-TYPO3-Parsetime.

disableAllHeaderCode

disableAllHeaderCode
Type
boolean
Default
0
Example
Provide JSON and disable HTML headers

If this is not set or set to 0, the PAGE object type in TypoScript outputs a HTML skeleton, see Output of the PAGE object.

To disable the default behaviour set disableAllHeaderCode = 1. The page then consists of only the cObject array (1,2,3,4...) output of the PAGE object type in TypoScript.

Use this feature for templates for content types other than HTML, for example images, RSS-feeds or ajax requests in an XML or JSON format.

This property can also be used to generate complete HTML pages, including the <html> and <body> tags.

disableBodyTag

disableBodyTag
Type
boolean
Default
0

If this option is set, the TYPO3 core will not generate the opening <body ...> part of the body tag. The closing </body> is not affected and will still be generated.

disableBodyTag takes precedence over bodyTagCObject, bodyTag and bodyTagAdd in the PAGE object type in TypoScript properties. If config.disableBodyTag = 1 then the other settings are ignored and won't have any effect.

disableCanonical

disableCanonical
Type
boolean

If the SEO system extension is installed, canonical tags are generated to prevent duplicate content. A good canonical is added in many cases by default. For edge cases, you might want to disable the rendering of this tag by setting it to 1.

disableHrefLang

disableHrefLang
Type
boolean

If the SEO system extension is installed, hreflang tags are generated in multi-language setups. By settings this option to 1 the rendering of the tags will be skipped.

disablePrefixComment

disablePrefixComment
Type
boolean

If set, stdWrap will be disabled, thus preventing any potentially revealing and space-consuming comments in the HTML source code.

disablePreviewNotification

disablePreviewNotification
Type
boolean
Default
0

Disables the "preview" notification box.

disableLanguageHeader

disableLanguageHeader
Type
boolean
Default
0

TYPO3 by default sends a Content-language: XX HTTP header, where "XX" is the ISO code of the relevant language. The value is based on the language defined in the Site Configuration.

If config.disableLanguageHeader is set, this header will not be sent.

doctype

doctype
Type
string

If set, then a document type declaration (and an XML prologue) will be generated. The value can either be a complete doctype or one of the following keywords:

xhtml_trans
for the XHTML 1.0 Transitional doctype.
xhtml_strict
for the XHTML 1.0 Strict doctype.
xhtml_basic
for the XHTML basic doctype.
xhtml_11
for the XHTML 1.1 doctype.
xhtml+rdfa_10
for the XHTML+RDFa 1.0 doctype.
html5
for the HTML5 doctype.
none
for no doctype.

See config.htmlTag_setParams for more details on the effect on the HTML tag.

It defaults to the HTML 5 doctype:

<!DOCTYPE html>
Copied!

enableContentLengthHeader

enableContentLengthHeader
Type
boolean
Default
1

If set, the header "content-length: [bytes of content]" is sent.

This is disabled if a backend user is logged in. The reason is that the content length header cannot include the length of these objects and the content-length will truncate the length of the document in some browsers.

extTarget

extTarget
Type
target
Default
_top

Default external target. Used by typolink if no extTarget is set.

fileTarget

fileTarget
Type
target

Default file link target. Used by typolink if no fileTarget is set.

forceAbsoluteUrls

forceAbsoluteUrls
Type
boolean
Default
0

If this option is set, all links, image references or assets previously built with a relative or absolute path (for example, /fileadmin/my-pdf.pdf) will be rendered as absolute URLs with the site prefix / current domain.

An example of a possible use case is generating a static version of a TYPO3 site for sending a page via email.

forceTypeValue

forceTypeValue
Type
boolean

Force the &type value of TYPO3 generated links to a specific value (except if overruled by local forceTypeValue values).

This is useful if you have a template with special content, for example &type=95, but still want to keep your targets neutral. Then you can set your targets to blank and this value to your required type value.

headerComment

headerComment
Type
string

This content is added above the "TYPO3 Content Management Framework" comment in the <head> page section. Use this to insert text like "Programmed by My-Agency".

htmlTag.attributes.[attribute]

htmlTag.attributes.[attribute]
Type
string / stdWrap
Example
setup-config-htmltag-attributes

Changed in version 14.0

Sets the <html> tag attributes on the page. Allows attributes to be customized and overridden using TypoScript without having to re-add attributes generated by siteHandling.

This property supersedes the previous config.htmlTag_setParams option by providing a more flexible API to add attributes.

config.htmlTag.attributes.my-attribute = 123
Copied!
config.htmlTag.attributes.my-attribute = 123
config.htmlTag.attributes.my-attribute.userFunc = MyVendor\MyExtension\HtmlTagEnhancer->overrideMyAttribute
Copied!

htmlTag_setParams

htmlTag_setParams
Type
string
Example
htmlTag_setParams example

Sets the <html> tag attributes on the page. If you set Properties of 'config' to a keyword that enables XHTML then some attributes will already be set. This property allows you to override preset attributes with your own content.

Special: If you set it to "none" then setting attributes is no longer possible.

If you have set htmlTag.attributes this property (htmlTag_setParams) will not have any effect.

htmlTag_stdWrap

htmlTag_stdWrap
Type

Modify the <html> tag with stdWrap functionality. Use this property to extend or override this tag.

index_descrLgd

index_descrLgd
Type
integer
Default
200

This indicates how many chars to preserve in the description of an indexed page. This can be used in search result output.

index_enable

index_enable
Type
boolean

Enables cached pages to be indexed.

Automatically enabled when indexed_search is enabled.

index_externals

index_externals
Type
boolean

If set, external media linked to on pages is indexed.

Automatically enabled when indexed_search is enabled.

index_metatags

index_metatags
Type
boolean
Default
1

This allows the indexing of metatags to be switched on or off. It is switched on by default.

inlineStyle2TempFile

inlineStyle2TempFile
Type
boolean
Default
1
Example
inlineStyle2TempFile example

If set, the inline styles TYPO3 controls in the core are written to the typo3temp/assets/css/stylesheet\_[hashstring].css file and the header then contains just a link to the stylesheet.

The file hash is based on the content of the styles.

intTarget

intTarget
Type
target

Default internal target. Used by typolink if no target is set.

linkVars

linkVars
Type
list
Example
Add &print parameter to all links

HTTP_GET_VARS, which is passed on in links in TYPO3. It is compiled into a string stored in $GLOBALS['TSFE']->linkVars

The values are rawurlencoded in PHP.

You can specify a range of valid values by appending a () after each value. If the range doesn't match, the variable won't be appended to links. This prevents the cache system getting flooded with forged values.

The range can contain one of the following values:

[a]-[b]
A range of allowed integer values
int
Only integer values are allowed
[a]\|[b]\|[c]
A list of allowed strings (whitespace will be removed)
/[regex]/
Match a regular expression (PCRE style)

You can use the pipe character (|) to access nested properties.

message_preview

message_preview
Type
string

Alternative message in HTML that appears when the preview function is active.

message_preview_workspace

message_preview_workspace
Type
string
Example
Customize workspace display box

Alternative message in HTML that appears when the preview function is active in a draft workspace. You can use sprintf() placeholders for Workspace title (first) and number (second).

moveJsFromHeaderToFooter

moveJsFromHeaderToFooter
Type
boolean

If set, all JavaScript (includes and inline) will be moved to the bottom of the HTML document, which is after the content and before the closing body tag.

MP_defaults

MP_defaults
Type
string
Syntax
[id],[id],... : [MP-var] \| [id],[id],... : [MP-var] \| ...
Example
Define mounting point defaults for certain pages

Allows you to set a list of page id numbers which will always have a certain "&MP=..." parameter added.

Imagine you have a TYPO3 site with several mount points, and you need certain pages to always include a specific mount point parameter for correct content rendering. By configuring :typoscriptMP_defaults, you can ensure consistency and reduce the risk of broken links or incorrect content being displayed due to missing parameters.

MP_disableTypolinkClosestMPvalue

MP_disableTypolinkClosestMPvalue
Type
boolean

If set, the typolink function will not try to find the closest MP value for the id.

MP_mapRootPoints

MP_mapRootPoints
Type
list of PIDs / string

Defines a list of ID numbers from which the MP-vars are automatically calculated for the branch.

The result is used just like MP_defaults are used to find MP-vars if none have been specified prior to the call to \TYPO3\CMS\Frontend\Typolink\PageLinkBuilder.

You can specify root as a special keyword in the list of IDs and that will create a map-tree for the whole site (but this may be VERY processing intensive if there are many pages!).

The order of IDs can be significant - any ID in a branch which has already been processed (by a previous ID root point) will not be processed again.

Configured IDs have to be the uids of actual mount point pages, not the targets.

namespaces.[identifier]

namespaces.[identifier]
Type
string :Example:setup-config-namespaces

This property enables you to add XML namespaces (xmlns) to the <html> tag. This is especially useful if you want to add RDFa or microformats to your HTML.

no_cache

no_cache
Type
boolean
Default
0

If this is set to 1, it disables the pages cache, meaning that the rendered result/response will not be saved to cache.

If set to 0, it is ignored. The rendered result (e.g. full html of a page) is stored in the pages cache.

Other parameters may have set it to true for other reasons. Note that setting this to 1 doesn't disable other TYPO3 caches. Instead of setting config.no_cache you can change dynamic (non-cacheable) content from USER to USER_INT (COA to COA_INT).

For more information about cache types see the cache types chapter.

noPageTitle

noPageTitle
Type
integer
Default
0
Example
Set a custom page renderer template

If you only want to have the site name (from the template record) in your <title> tag, set this to 1. If the value is 2 then the <title> tag is not output.

Please note that this tag is required for (X)HTML compliant output, so you should only disable this tag if you have already generated it manually.

pageRendererTemplateFile

pageRendererTemplateFile
Type
string
Default
file:EXT:core/Resources/Private/Templates/PageRenderer.html

Sets the template for page renderer class \TYPO3\CMS\Core\Page\PageRenderer .

pageTitle

pageTitle
Type

stdWrap for the page title. This option will be executed after all other processing options like Properties of 'config'.

pageTitleFirst

pageTitleFirst
Type
boolean
Default
0
Example
Reorder the default page title providers

TYPO3 by default prints title tags in the format "website: page title".

If pageTitleFirst is set (and if the page title is printed), then the page title will be printed before the template title, i.e. "page title: website".

pageTitleProviders

pageTitleProviders
Type
array

In order to set page titles, an API is available. The API uses PageTitleProviders to set the page title based on the page record and the content on that page.

Based on the priority of providers, PageTitleProviderManager will check the providers to see if they have titles. It will start with the highest priority PageTitleProviders.

pageTitleSeparator

pageTitleSeparator
Type
array
Default
: (colon with following space)
Example
Use custom separators between page title parts

The symbols ouput in the title tag between the website name and the page title. If pageTitleSeparator is set, but no sub-properties are defined, then a space will be added to the end of the separator. stdWrap can be used to adjust whitespace at the beginning and end of the separator.

removeDefaultCss

removeDefaultCss
Type
boolean
Example
Remove default external JavaScript and all default CSS

Remove CSS generated by the _CSS_DEFAULT_STYLE extension property. ( _CSS_DEFAULT_STYLE outputs a set of default styles for extensions with frontend plugins)

removeDefaultJS

removeDefaultJS
Type
boolean / string
Example
Remove default external JavaScript and all default CSS

If set, default JavaScript in the header will be removed.

The default JavaScript decrypts email addresses.

Special case: If the value is set to the string external, then the default JavaScript is written to a temporary file and included in that file. See inlineStyle2TempFile example.

sendCacheHeaders

sendCacheHeaders
Type
boolean

If set, TYPO3 will output cache-control headers to the client based on whether the page was internally cached. This feature allows client browsers and/or reverse proxies to take load off TYPO3 websites.

The conditions for allowing client caching are:

  • page was cached
  • No *_INT or *_EXT objects are on the page (e.g. USER and USER_INT)
  • No frontend users are logged in
  • No backend users are logged in

If these conditions are met, the headers sent are:

  • Last-Modified [SYS_LASTCHANGED of page id]
  • Expires [expire time of page cache]
  • ETag [md5 of content]
  • Cache-Control: max-age: [seconds til expiretime]
  • Pragma: public

If caching is not allowed, the following headers are sent to avoid client caching:

  • Cache-Control: private, no-store

Notice that enabling browser caches means you will have to consider how log files are written because when a page is cached on the client it will not invoke a request to the webserver, thus not writing the request to a log. There should be ways to circumvent these problems but they are outside the domain of TYPO3.

Tip: Enabling cache-control headers might confuse editors seeing old content served from the browser cache. "Shift-Reload" will bypass both browser- and reverse-proxy caches and make TYPO3 regenerate the page. A good tip worth knowing about!

sendCacheHeadersForSharedCaches

sendCacheHeadersForSharedCaches
Type
auto, force, or empty

New in version 13.3

When working with proxies, keeping a cached version for a period of time and answering requests from the client will take load off TYPO3 / the webserver, while at the same time notifying the client not to cache the response in the browser cache.

This is achieved by setting config.sendCacheHeadersForSharedCaches = auto.

When this option is enabled, TYPO3 evaluates the current TYPO3 frontend request to see if it is being executed behind a reverse proxy. If so, TYPO3 sends the following HTTP Response Headers as a cached response:

Expires: Thu, 26 Aug 2024 08:52:00 GMT
ETag: "d41d8cd98f00b204ecs00998ecf8427e"
Cache-Control: max-age=0, s-maxage=86400
Pragma: public
Copied!

When config.sendCacheHeadersForSharedCaches = force the reverse proxy evaluation can be omitted. Use for local webserver internal caches.

See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control for details and whether your reverse proxy supports this directive.

showWebsiteTitle

showWebsiteTitle
Type
boolean
Default
1

This option can be used to specify whether the website title defined in the site configuration should be added to the page title (used for the <title> tag, for example).

By default, the website title is added. To omit the website title, set the option to 0.

spamProtectEmailAddresses

spamProtectEmailAddresses
Type
-10 to 10
Example
Spam protect email addresses automatically

If set, all email addresses in typolinks will be encrypted so that it is harder for spam bots to detect them.

If you set this value to a number then the encryption method is an offset of character values. If you set this value to "-2" all characters will have their ASCII value offset by "-2". It works by adding a small piece of JavaScript code to every web page.

(It is recommended to set the option to a value between -5 to 1 since setting it to >= 2 means a "z" is converted to "|" which is a special character in TYPO3 table syntax – which might lead to confusion.)

Default JavaScript needs to be enabled. (see removeDefaultJS)

spamProtectEmailAddresses_atSubst

spamProtectEmailAddresses_atSubst
Type
string
Default
(at)
Example
Spam protect email addresses automatically

Substitute label for the at-sign (@).

spamProtectEmailAddresses_lastDotSubst

spamProtectEmailAddresses_lastDotSubst
Type
string
Default
. (just a simple dot)
Example
Spam protect email addresses automatically

Substitute label for the last dot in the email address.

tx_[extension key with no underscores]_[*]

tx_[extension key with no underscores]_[*]
Type
array
Example
Define configuration for custom namespaces

Configuration space for extensions. This can be used for plugins that have TypoScript configuration, but that don't display anything in the frontend (i.e. don't receive their configuration as an argument from the frontend rendering process).

typolinkLinkAccessRestrictedPages

typolinkLinkAccessRestrictedPages
Type
integer (page id) / keyword "NONE"
Example
Define custom styling for access restricted page links

If set, typolinks pointing to access restricted pages will still link to the page even though the page cannot be accessed. If the value of this setting is an integer it will be interpreted as a page id to which the link will be directed.

If the value is NONE, the original link to the page will be kept although it will generate a page-not-found situation (which could, of course, be properly handled by the page-not-found handler and present a nice login form).

See showAccessRestrictedPages for menu objects as well (similar feature for menus)

typolinkLinkAccessRestrictedPages.ATagParams

typolinkLinkAccessRestrictedPages.ATagParams
Type
string
Example
Define custom styling for access restricted page links

typolinkLinkAccessRestrictedPages.ATagParams Add custom attributes to the anchor tag.

typolinkLinkAccessRestrictedPages_addParams

typolinkLinkAccessRestrictedPages_addParams
Type
string
Example
Define custom styling for access restricted page links

typolinkLinkAccessRestrictedPages_xmlprologue

typolinkLinkAccessRestrictedPages_xmlprologue
Type
string

If empty (not set) then the default XML 1.0 prologue is set, when the doctype is set to a known keyword (e.g. xhtml_11):

Output
<?xml version="1.0" encoding="utf-8">
Copied!

If set to one of the following keywords then a standard prologue will be set:

xml_10:
XML 1.0 prologue (see above)
xml_11:
XML 1.1 prologue
none:
The default XML prologue is not set.

Any other string is used as the XML prologue itself.

Examples 

Example: prefix absolute paths 

Demonstrates:
  1. Prefixing all links with a "/" results in absolute link paths:

    EXT:site_package/Configuration/TypoScript/setup.typoscript
    config.absRefPrefix = /
    Copied!
  2. Prefixing all links with a path to a subdirectory:

    EXT:site_package/Configuration/TypoScript/setup.typoscript
    config.absRefPrefix = /some-subsite/
    Copied!
  3. Prefixing all links with a URI scheme:

    EXT:site_package/Configuration/TypoScript/setup.typoscript
    config.absRefPrefix = https://example.org/
    Copied!

set additional headers data 

Demonstrates:
  1. General usage

    EXT:site_package/Configuration/TypoScript/setup.typoscript
    config.additionalHeaders {
      10 {
        # The header string
        header = foo
    
        # Do not replace previous headers with the same name.
        replace = 0
    
        # Force a 401 HTTP response code
        httpResponseCode = 401
      }
      # Always set cache headers to private, overwriting the default TYPO3 Cache-control header
      20.header = Cache-control: Private
    }
    Copied!
  2. General usage, same usage, alternate notation

    EXT:site_package/Configuration/TypoScript/setup.typoscript
    config.additionalHeaders.10.header = foo
    config.additionalHeaders.10.replace = 0
    config.additionalHeaders.10.httpResponseCode = 401
    config.additionalHeaders.20.header = Cache-control: Private
    Copied!
  3. Set content type for a page returning JSON

    EXT:site_package/Configuration/TypoScript/setup.typoscript
    json = PAGE
    json {
      typeNum = 1617455215
      10 =< tt_content.list.20.tx_myextension_myjsonplugin
      config {
        disableAllHeaderCode = 1
        additionalHeaders.10.header = Content-type:application/json
      }
    }
    Copied!

config cache examples 

Demonstrates:

This includes the fe_users records on page 2 in the cache lifetime calculation for page 10:

EXT:site_package/Configuration/TypoScript/setup.typoscript
config.cache.10 = fe_users:2
Copied!

This includes records from multiple sources; fe_users records on page 2 and tt_new records on page 11:

EXT:site_package/Configuration/TypoScript/setup.typoscript
config.cache.10 = fe_users:2,tt_news:11
Copied!

Take fe_users records on storage page 2 into account for the cache lifetime of all pages:

EXT:site_package/Configuration/TypoScript/setup.typoscript
config.cache.all = fe_users:2
Copied!

Each page's cache lifetime is affected if fe_users stored on the same page are changed:

EXT:site_package/Configuration/TypoScript/setup.typoscript
config.cache.all = fe_users:current
Copied!

Config compress CSS example 

Demonstrates:
EXT:site_package/Configuration/TypoScript/setup.typoscript
config.compressCss = 1
Copied!

Config compress JavaScript 

Demonstrates:
EXT:site_package/Configuration/TypoScript/setup.typoscript
config.compressJs = 1
Copied!

Concatenate CSS Example 

Demonstrates:
EXT:site_package/Configuration/TypoScript/setup.typoscript
config.concatenateCss = 1
Copied!

concatenateJs 

Demonstrates:
EXT:site_package/Configuration/TypoScript/setup.typoscript
config.concatenateJs = 1

page = PAGE
page.includeJSFooter {
    test = fileadmin/user_upload/test.js
    test.async = 1

    test2 = fileadmin/user_upload/test2.js
    test2.async = 1
}
Copied!

contentObjectExceptionHandler example 

Demonstrates:
EXT:site_package/Configuration/TypoScript/setup.typoscript
# Use 1 for the default exception handler (enabled by default in production context)
config.contentObjectExceptionHandler = 1

# Use a class name for individual exception handlers
config.contentObjectExceptionHandler = TYPO3\CMS\Frontend\ContentObject\Exception\ProductionExceptionHandler

# Customize the error message. A randomly generated code is replaced within the message if needed.
config.contentObjectExceptionHandler.errorMessage = Oops an error occurred. Code: %s

# Configure exception codes which will not be handled, but bubble up again (useful for temporary fatal errors)
tt_content.login.20.exceptionHandler.ignoreCodes.10 = 1414512813

# Disable the exception handling for an individual plugin/ content object
tt_content.login.20.exceptionHandler = 0

# ignoreCodes and errorMessage can be both configured globally …
config.contentObjectExceptionHandler.errorMessage = Oops an error occurred. Code: %s
config.contentObjectExceptionHandler.ignoreCodes.10 = 1414512813

# … or locally for individual content objects
tt_content.login.20.exceptionHandler.errorMessage = Oops an error occurred. Code: %s
tt_content.login.20.exceptionHandler.ignoreCodes.10 = 1414512813
Copied!

Provide JSON and disable HTML headers 

A page type providing JSON:

EXT:site_package/Configuration/TypoScript/setup.typoscript
json = PAGE
json {
    typeNum = 1617455215
    10 =< tt_content.list.20.tx_myextension_myjsonplugin
    config {
        disableAllHeaderCode = 1
        additionalHeaders.10.header = Content-type:application/json
    }
}
Copied!

HTML tag attributes example 

Demonstrates:
EXT:site_package/Configuration/TypoScript/setup.typoscript
config.htmlTag.attributes.class = no-js
Copied!

Results in :

Example output
<html lang="fr" class="no-js">
Copied!
EXT:site_package/Configuration/TypoScript/setup.typoscript
config.htmlTag.attributes.amp =
Copied!

Results in :

Example output
<html lang="fr" amp>
Copied!

htmlTag_setParams example 

Demonstrates:
EXT:site_package/Configuration/TypoScript/setup.typoscript
config.htmlTag_setParams = xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US"
Copied!

inlineStyle2TempFile example 

Demonstrates:
EXT:site_package/Configuration/TypoScript/setup.typoscript
config.inlineStyle2TempFile = 0
Copied!

Customize workspace display box 

Demonstrates:
EXT:site_package/Configuration/TypoScript/setup.typoscript
config.message_preview_workspace = <div class="previewbox">Displaying workspace named "%s" (number %s)!</div>
config.message_preview_workspace = <div class="previewbox">Displaying workspace number %2$s named "%1$s"!</div>
Copied!

Define mounting point defaults for certain pages 

Demonstrates:
EXT:site_package/Configuration/TypoScript/setup.typoscript
config.MP_defaults = 36,37,48 : 2-207
Copied!

This will by default add &MP=2-207 to all links pointing to pages 36,37 and 48.

Define Dublin Core Metadata Element Set (dc) xmlns namespace 

Demonstrates:
EXT:site_package/Configuration/TypoScript/setup.typoscript
config.namespaces.dc = http://purl.org/dc/elements/1.1/
config.namespaces.foaf = http://xmlns.com/foaf/0.1/
Copied!

This configuration will result in an <html> tag like:

EXT:site_package/Configuration/TypoScript/setup.typoscript
<html xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:foaf="http://xmlns.com/foaf/0.1/">
Copied!

Set a custom page renderer template 

Demonstrates:
EXT:site_package/Configuration/TypoScript/setup.typoscript
config.pageRendererTemplateFile = EXT:my_extension/Resources/Private/Templates/TestPagerender.html
Copied!

Reorder the default page title providers 

Demonstrates:

By default, TYPO3 ships with two providers:

EXT:site_package/Configuration/TypoScript/setup.typoscript
config.pageTitleProviders {
    record {
        provider = TYPO3\CMS\Core\PageTitle\RecordPageTitleProvider
    }
    seo {
        provider = TYPO3\CMS\Seo\PageTitle\SeoTitlePageTitleProvider
        before = record
    }
}
Copied!

The order of providers is based on the before and after parameters. If you want a provider to be handled before a specific other provider, set that provider in before and after.

You can find information about creating your own PageTitleProviders in the section PageTitle API.

Use custom separators between page title parts 

Demonstrates:

This produces a title tag with the format "website . page title":

EXT:site_package/Configuration/TypoScript/setup.typoscript
config.pageTitleSeparator = .
Copied!

This produces a title tag with the format "website - page title":

EXT:site_package/Configuration/TypoScript/setup.typoscript
config.pageTitleSeparator = -
config.pageTitleSeparator.noTrimWrap = | | |
Copied!

This produces a title tag with the format "website*page title":

EXT:site_package/Configuration/TypoScript/setup.typoscript
config.pageTitleSeparator = *
config.pageTitleSeparator.noTrimWrap = |||
Copied!

If you want to remove the web page title from the title, choose a separator that is not included in the web page title. Then split the title from that character and return the second part only:

EXT:site_package/Configuration/TypoScript/setup.typoscript
config.pageTitleSeparator = *
config.pageTitle.stdWrap {
    split {
        token = *
        returnKey = 1
    }
}
Copied!

Remove default external JavaScript and all default CSS 

Demonstrates:
EXT:site_package/Configuration/TypoScript/setup.typoscript
config  {
    removeDefaultJS = external
    removeDefaultCss = 1
}
Copied!

Spam protect email addresses automatically 

Demonstrates:
EXT:site_package/Configuration/TypoScript/setup.typoscript
config {
    spamProtectEmailAddresses = -2
    spamProtectEmailAddresses_atSubst = (at)
    spamProtectEmailAddresses_lastDotSubst = (dot)
}
Copied!

Define configuration for custom namespaces 

Demonstrates:
EXT:site_package/Configuration/TypoScript/setup.typoscript
config.tx_realurl_enable = 1
config.tx_myextension.width  = 10
config.tx_myextension.length = 20
Copied!