---
title: "SYS - System configuration"
manual: "TYPO3 Explained"
version: "12.4"
permalink: "https://docs.typo3.org/permalink/t3coreapi:typo3confvars-sys@12.4"
source: "Configuration/Typo3ConfVars/SYS.rst"
rendered: "2026-10-21T15:29:37+00:00"
---

> [!WARNING]
> **Attention**
>
> TYPO3 v12 has reached end-of-life as of April 30th 2026 and
> is no longer being maintained. Use the version switcher on the top
> left of this page to select documentation for a supported version of TYPO3.
>
> Need more time before upgrading?
> You can purchase Extended Long Term Support (ELTS) for TYPO3 v12 here:
> [TYPO3 ELTS](https://typo3.com/services/extended-support-elts).

<a id="typo3confvars-sys-messenger"></a>
<a id="typo3confvars-sys-passwordpolicies"></a>
<a id="typo3confvars-sys-lang"></a>
<a id="typo3confvars-sys-linkhandler"></a>
<a id="typo3confvars-sys-availablepasswordhashalgorithms"></a>
<a id="typo3confvars-sys-features"></a>
<a id="typo3confvars-sys-systemmaintainers"></a>
<a id="typo3confvars-sys-ipanonymization"></a>
<a id="typo3confvars-sys-generateapachehtaccess"></a>
<a id="typo3confvars-sys-belogerrorreporting"></a>
<a id="typo3confvars-sys-exceptionalerrors"></a>
<a id="typo3confvars-sys-errorhandlererrors"></a>
<a id="typo3confvars-sys-errorhandler"></a>
<a id="typo3confvars-sys-debugexceptionhandler"></a>
<a id="typo3confvars-sys-productionexceptionhandler"></a>
<a id="typo3confvars-sys-displayerrors"></a>
<a id="typo3confvars-sys-reverseproxyprefixssl"></a>
<a id="typo3confvars-sys-reverseproxyssl"></a>
<a id="typo3confvars-sys-reverseproxyprefix"></a>
<a id="typo3confvars-sys-reverseproxyheadermultivalue"></a>
<a id="typo3confvars-sys-reverseproxyip"></a>
<a id="typo3confvars-sys-systemlocale"></a>
<a id="typo3confvars-sys-utf8filesystem"></a>
<a id="typo3confvars-sys-phptimezone"></a>
<a id="typo3confvars-sys-setmemorylimit"></a>
<a id="typo3confvars-sys-binsetup"></a>
<a id="typo3confvars-sys-binpath"></a>
<a id="typo3confvars-sys-miscfile-ext"></a>
<a id="typo3confvars-sys-mediafile-ext"></a>
<a id="typo3confvars-sys-textfile-ext"></a>
<a id="typo3confvars-sys-logincopyrightwarrantyurl"></a>
<a id="typo3confvars-sys-logincopyrightwarrantyprovider"></a>
<a id="typo3confvars-sys-hhmm"></a>
<a id="typo3confvars-sys-ddmmyy"></a>
<a id="typo3confvars-sys-devipmask"></a>
<a id="typo3confvars-sys-trustedhostspattern"></a>
<a id="typo3confvars-sys-cookiedomain"></a>
<a id="typo3confvars-sys-encryptionkey"></a>
<a id="typo3confvars-sys-defaultscheme"></a>
<a id="typo3confvars-sys-sitename"></a>
<a id="typo3confvars-sys-creategroup"></a>
<a id="typo3confvars-sys-foldercreatemask"></a>
<a id="typo3confvars-sys-filecreatemask"></a>

# SYS - System configuration {#typo3confvars-sys}

The following configuration variables can be used for system wide
configurations.

> [!NOTE]
> The configuration values listed here are keys in the global PHP array
> `$GLOBALS['TYPO3_CONF_VARS']['SYS']`.
>
> This variable can be set in one of the following files:
>
> -   [config/system/settings.php](https://docs.typo3.org/permalink/t3coreapi:typo3confvars-settings@12.4)
> -   [config/system/additional.php](https://docs.typo3.org/permalink/t3coreapi:typo3confvars-additional@12.4)

-   **caching**

    -   *Type:* array
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['caching'\]
    -   *Default:* See [EXT:core/Configuration/DefaultConfiguration.php (GitHub)](https://github.com/typo3/typo3/blob/12.4/typo3/sysext/core/Configuration/DefaultConfiguration.php)

    -   **cacheConfigurations**

        -   *Type:* array
        -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['caching'\]\['cacheConfigurations'\]
        -   *Default:* See [EXT:core/Configuration/DefaultConfiguration.php (GitHub)](https://github.com/typo3/typo3/blob/12.4/typo3/sysext/core/Configuration/DefaultConfiguration.php)

        Registry of configured caches. Each cache is identified by its array
        key. Each cache key can contain sub-keys `frontend`, `backend` and
        `options` which set the frontend, backend and backend options for a
        configured cache.

        See also [Cache configuration](https://docs.typo3.org/permalink/t3coreapi:caching-configuration@12.4).

-   **fileCreateMask**

    -   *Type:* text
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['fileCreateMask'\]
    -   *Default:* 0664

    File mode mask for Unix file systems (when files are uploaded/created).

-   **folderCreateMask**

    -   *Type:* text
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['folderCreateMask'\]
    -   *Default:* 2775

    As above, but for folders.

-   **createGroup**

    -   *Type:* text
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['createGroup'\]
    -   *Default:* ''

    Group for newly created files and folders (Unix only). Group ownership can
    be changed on Unix file systems (see above). Set this if you want to change
    the group ownership of created files/folders to a specific group.

    This makes sense in all cases where the webserver is running with a
    different user/group as you do. Create a new group on your system and add
    you and the webserver user to the group. Now you can safely set the last
    bit in fileCreateMask/folderCreateMask to 0 (for example 770). Important: The
    user who is running your webserver needs to be a member of the group you
    specify here! Otherwise you might get some error messages.

-   **sitename**

    -   *Type:* text
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['sitename'\]
    -   *Default:* 'TYPO3'

    Name of the base-site.

-   **defaultScheme**

    -   *Type:* text
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['defaultScheme'\]
    -   *Default:* 'http'

    ..  versionadded:: 12.0
        The setting `defaultScheme` was added in TYPO3 v12 to make it possible to
        configure the default URI scheme when links are created by the Core.
    Previously, `'http'` was always used.

    Set the default URI scheme. This is used within links if no scheme is given.
    One can set this to `'https'` if this should be used by default.

-   **encryptionKey**

    -   *Type:* text
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['encryptionKey'\]
    -   *Default:* ''

    This is a "salt" used for various kinds of encryption, CRC checksums and
    validations. You can enter any rubbish string here but try to keep it
    secret. You should notice that a change to this value might invalidate
    temporary information, URLs etc. At least, clear all cache if you change
    this so any such information can be rebuilt with the new key.

-   **cookieDomain**

    -   *Type:* text
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['cookieDomain'\]
    -   *Default:* ''

    Restricts the domain name for FE and BE session cookies. When setting the
    value to ".example.org" (replace example.org with your domain!), login
    sessions will be shared across subdomains. Alternatively, if you have more
    than one domain with sub-domains, you can set the value to a regular
    expression to match against the domain of the HTTP request. This however requires
    that all sub-domains are within the same TYPO3 instance, because a session can be tied
    to only one database.

    The result of the match is used as the domain for the cookie. for example :
    php:`/.(example1|example2).com$/` or `/\.(example1\.com)|(example2\.net)$/`.
    Separate domains for FE and BE can be set using
    [$TYPO3_CONF_VARS\[FE\]\[cookieDomain\]](https://docs.typo3.org/permalink/t3coreapi:typo3confvars-fe-cookiedomain@12.4) and
    [$TYPO3_CONF_VARS\[BE\]\[cookieDomain\]](https://docs.typo3.org/permalink/t3coreapi:typo3confvars-be-cookiedomain@12.4)
    respectively.

-   **trustedHostsPattern**

    -   *Type:* text
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['trustedHostsPattern'\]
    -   *Default:* 'SERVER_NAME'

    Regular expression pattern that matches all allowed hostnames (including
    their ports) of this TYPO3 installation, or the string `SERVER_NAME`
    (default).

    The default value `SERVER_NAME` checks if the HTTP Host header equals
    the SERVER_NAME and SERVER_PORT. This is secure in correctly configured
    hosting environments and does not need further configuration. If you cannot
    change your hosting environment, you can enter a regular expression here.

    Examples:

    `.*\.example\.org` matches all hosts that end with
    `.example.org` with all corresponding subdomains.

    `.*\.example\.(org|com)` matches all hostnames with
    subdomains from `.example.org` and `.example.com`.

    Be aware that HTTP Host header may also contain a port. If your installation

    runs on a specific port, you need to explicitly allow this in your pattern,

    for example `example\.org:88` allows only `example.org:88`,
    **not** `example.org`. To disable this check completely
    (not recommended because it is **insecure**) you can use `.*` as pattern.

    Have also a look into the [security guidelines](https://docs.typo3.org/permalink/t3coreapi:security-global-typo3-options-trustedhostspattern@12.4).

-   **devIPmask**

    -   *Type:* text
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['devIPmask'\]
    -   *Default:* '127.0.0.1,::1'

    Defines a list of IP addresses which will allow development output to
    display. The `debug()` function will use this as a filter. See the
    function `\TYPO3\CMS\Core\Utility\GeneralUtilitycmpIP()` for details
    on syntax. Setting this to blank value will deny all.
    Setting to "\*" will allow all.

    Have also a look into the [security guidelines](https://docs.typo3.org/permalink/t3coreapi:security-global-typo3-options-devipmask@12.4).

<!-- TODO: no Markdown rendering for "versionchanged" -->

The default value has been changed from 'd-m-y' to 'Y-m-d' (ISO 8601) to
avoid unclear dates.

-   **ddmmyy**

    -   *Type:* text
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['ddmmyy'\]
    -   *Default:* 'Y-m-d'

    On how to format a date, see PHP function
    [date()](https://www.php.net/manual/en/function.date.php).

-   **hhmm**

    -   *Type:* text
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['hhmm'\]
    -   *Default:* 'H:i'

    Format of Hours-Minutes - see PHP-function [date()](https://www.php.net/manual/en/function.date.php)

-   **loginCopyrightWarrantyProvider**

    -   *Type:* text
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['loginCopyrightWarrantyProvider'\]
    -   *Default:* ''

    If you provide warranty for TYPO3 to your customers insert you (company)
    name here. It will appear in the login-dialog as the warranty provider.
    (You must also set URL below).

-   **loginCopyrightWarrantyURL**

    -   *Type:* text
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['loginCopyrightWarrantyURL'\]
    -   *Default:* ''

    Add the URL where you explain the extend of the warranty you provide.
    This URL is displayed in the login dialog as the place where people can
    learn more about the conditions of your warranty. Must be set
    (more than 10 chars) in addition with the
    [loginCopyrightWarrantyProvider](https://docs.typo3.org/permalink/t3coreapi:typo3confvars-sys-logincopyrightwarrantyprovider@12.4)
    message.

-   **textfile_ext**

    -   *Type:* text
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['textfile_ext'\]
    -   *Default:* 'txt,ts,typoscript,html,htm,css,tmpl,js,sql,xml,csv,xlf,yaml,yml'

    Text file extensions. Those that can be edited. Executable PHP files may not
    be editable if disallowed!

-   **mediafile_ext**

    -   *Type:* text
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['mediafile_ext'\]
    -   *Default:* 'gif,jpg,jpeg,bmp,png,pdf,svg,ai,mp3,wav,mp4,ogg,flac,opus,webm,youtube,vimeo'

    Commalist of file extensions perceived as media files by TYPO3.
    Must be written in lower case with no spaces between.

-   **miscfile_ext**

    -   *Type:* text
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['miscfile_ext'\]
    -   *Default:* 'zip'

    <!-- TODO: no Markdown rendering for "versionadded" -->

    This property has been added with the security fix Important: #106240 - Enforce File Extension and MIME-Type Consistency in File Abstraction Layer.Allows specifying file extensions that don't belong to either `textfile_ext`
    or `mediafile_ext`, such as `zip` or `xz`.

-   **binPath**

    -   *Type:* text
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['binPath'\]
    -   *Default:* ''

    List of absolute paths where external programs should be searched for.
    for example `/usr/local/webbin/,/home/xyz/bin/`. (ImageMagick path have to
    be configured separately)

-   **binSetup**

    -   *Type:* multiline
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['binSetup'\]
    -   *Default:* ''

    List of programs (separated by newline or comma). By default programs
    will be searched in default paths and the special paths defined by
    [binPath](https://docs.typo3.org/permalink/t3coreapi:typo3confvars-sys-binpath@12.4). When PHP has `openbasedir`
    enabled, the programs can not be found and have to be configured here.

    Example: `perl=/usr/bin/perl,unzip=/usr/local/bin/unzip`

-   **setMemoryLimit**

    -   *Type:* int
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['setMemoryLimit'\]
    -   *Default:* 0

    Memory limit in MB: If more than 16, TYPO3 will try to use `ini_set()`
    to set the memory limit of PHP to the value. This works only if the function
    `ini_set()` is not disabled by your sysadmin.

-   **phpTimeZone**

    -   *Type:* text
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['phpTimeZone'\]
    -   *Default:* ''

    Timezone to force for all `date()` and `mktime()` functions.
    A list of supported values can be found at
    [php.net](https://www.php.net/manual/en/timezones.php).

    If blank, a valid fallback will be searched for by PHP (
    [date.timezone](https://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone)
    in `php.ini`, server defaults, etc); and if no fallback is found, the value of
    "UTC" is used instead.

-   **UTF8filesystem**

    -   *Type:* bool
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['UTF8filesystem'\]
    -   *Default:* true

    <!-- TODO: no Markdown rendering for "versionchanged" -->

    Before TYPO3 v12 the default value for new installations was always set to false.
    However, because almost every file system now supports UTF-8 the new default value
    is set to true.If set to `true`, then TYPO3 uses UTF-8 to store file names. This allows for accented
    latin letters as well as any other non-latin characters like Cyrillic and
    Chinese.

    If set to `false`, any file that contains characters like umlauts, or if the
    file name consists only of "special" characters such as Japanese, then the file will be renamed to
    something "safe" when uploaded in the backend.

    > [!WARNING]
    > **Attention**
    >
    > This requires a UTF-8 compatible locale in order to work. Otherwise
    > problems with filenames containing special characters will occur.
    > See [\[SYS\]\[systemLocale\]](https://docs.typo3.org/permalink/t3coreapi:typo3confvars-sys-utf8filesystem@12.4) and
    > [php function setlocale()](https://www.php.net/manual/en/function.setlocale.php).

-   **systemLocale**

    -   *Type:* text
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['systemLocale'\]
    -   *Default:* ''

    Locale used for certain system related functions, for example escaping shell
    commands. If problems with filenames containing special characters occur,
    the value of this option is probably wrong. See
    [php function setlocale()](https://www.php.net/manual/en/function.setlocale.php).

-   **reverseProxyIP**

    -   *Type:* list
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['reverseProxyIP'\]
    -   *Default:* ''
    -   *allowedValues:* 1 `''`, `'*'` or a comma separated list of IPv4 or IPv6 addresses in CIDR-notation. For IPv4 addresses wildcards are additionally supported.

    If TYPO3 is behind one or more (intransparent) reverse
    proxies or load balancers the IP addresses or CIDR ranges must be added here and
    [reverseProxyHeaderMultiValue](https://docs.typo3.org/permalink/t3coreapi:confval-globals-typo3-conf-vars-sys-reverseproxyheadermultivalue@12.4) must be set to `first` or `last`.

    **config/system/additional.php**

    ```php
    $GLOBALS['TYPO3_CONF_VARS']['SYS']['reverseProxyHeaderMultiValue'] = 'first';
    $GLOBALS['TYPO3_CONF_VARS']['SYS']['reverseProxyIP'] = '192.168.0.0/16';
    ```

    > [!NOTE]
    > **See also**
    >
    > -   [Running TYPO3 behind a reverse proxy](https://docs.typo3.org/permalink/t3coreapi:reverse-proxy-setup@12.4)
    > -   [reverseProxySSL](https://docs.typo3.org/permalink/t3coreapi:confval-globals-typo3-conf-vars-sys-reverseproxyssl@12.4)

-   **reverseProxyHeaderMultiValue**

    -   *Type:* text
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['reverseProxyHeaderMultiValue'\]
    -   *allowedValues:* 1 none Do not evaluate the reverse proxy header

    -   **first**

        Use the first IP address in the proxy header

    -   **last**

        Use the last IP address in the proxy header

    -   *Default:* 'none'

    Position of the authoritative IP address within the `X-Forwarded-For` header
    (for example, `X-Forwarded-For: 1.2.3.4, 2.3.4.5, 3.4.5.6` uses `1.2.3.4`
    with `first` and `3.4.5.6` with `last`).

-   **reverseProxyPrefix**

    -   *Type:* text
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['reverseProxyPrefix'\]
    -   *Default:* ''

    Optional prefix to be added to the internal URL (SCRIPT_NAME and
    REQUEST_URI).

    Example: When proxying `external.example.org` to `internal.example.org/prefix` this has to
    be set to `prefix`

-   **reverseProxySSL**

    -   *Type:* text
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['reverseProxySSL'\]
    -   *Default:* ''
    -   *allowedValues:* 1 `''`, `'*'` or a comma separated list of IPv4 or IPv6 addresses in CIDR-notation. For IPv4 addresses wildcards are additionally supported.

    `*` or a list of IP addresses of proxies that use SSL (https) for
    the connection to the client, but an unencrypted connection (http) to
    the server. If `*` all proxies defined in
    [\[SYS\]\[reverseProxyIP\]](https://docs.typo3.org/permalink/t3coreapi:typo3confvars-sys-reverseproxyip@12.4) use SSL.

    > [!NOTE]
    > **See also**
    >
    > -   [Running TYPO3 behind a reverse proxy](https://docs.typo3.org/permalink/t3coreapi:reverse-proxy-setup@12.4)
    > -   [reverseProxyIP](https://docs.typo3.org/permalink/t3coreapi:confval-globals-typo3-conf-vars-sys-reverseproxyip@12.4)

-   **reverseProxyPrefixSSL**

    -   *Type:* text
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['reverseProxyPrefixSSL'\]
    -   *Default:* ''

    Prefix to be added to the internal URL (SCRIPT_NAME and REQUEST_URI)
    when accessing the server via an SSL proxy. This setting overrides
    [\[SYS\]\[reverseProxyPrefix\]](https://docs.typo3.org/permalink/t3coreapi:typo3confvars-sys-reverseproxyprefix@12.4).

-   **displayErrors**

    -   *Type:* int
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['displayErrors'\]
    -   *Default:* -1
    -   *allowedValues:* 1 `-1` TYPO3 does not touch the PHP setting. If [\[SYS\]\[devIPmask\]](https://docs.typo3.org/permalink/t3coreapi:typo3confvars-sys-devipmask@12.4) matches the users IP address, the configured [\[SYS\]\[debugExceptionHandler\]](https://docs.typo3.org/permalink/t3coreapi:typo3confvars-sys-debugexceptionhandler@12.4) is used instead of the [\[SYS\]\[productionExceptionHandler\]](https://docs.typo3.org/permalink/t3coreapi:typo3confvars-sys-productionexceptionhandler@12.4) to handle exceptions.

    -   **`0`**

        Live: Do not display any PHP error message. Sets `display_errors=0`.
        Overrides the value of
        [\[SYS\]\[exceptionalErrors\]](https://docs.typo3.org/permalink/t3coreapi:typo3confvars-sys-exceptionalerrors@12.4)
        and sets it to 0
        (= no errors are turned into exceptions). The configured
        [\[SYS\]\[productionExceptionHandler\]](https://docs.typo3.org/permalink/t3coreapi:typo3confvars-sys-productionexceptionhandler@12.4)
        is used as exception handler.

    -   **`1`**

        Debug: Display error messages with the registered
        [\[SYS\]\[errorHandler\]](https://docs.typo3.org/permalink/t3coreapi:typo3confvars-sys-errorhandler@12.4).
        Sets `display_errors=1`. The configured
        [\[SYS\]\[debugExceptionHandler\]](https://docs.typo3.org/permalink/t3coreapi:typo3confvars-sys-debugexceptionhandler@12.4)
        is used as exception handler.

    Configures whether PHP errors or exceptions should be displayed,
    effectively setting the PHP option `display_errors` during runtime.

    Have also a look into the [security guidelines](https://docs.typo3.org/permalink/t3coreapi:security-global-typo3-options-displayerrors@12.4).

-   **productionExceptionHandler**

    -   *Type:* phpClass
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['productionExceptionHandler'\]
    -   *Default:* `\TYPO3\CMS\Core\Error\ProductionExceptionHandler::class`

    Classname to handle exceptions that might happen in the TYPO3-code. Leave
    this empty to disable exception handling.  The default exception handler displays
    a nice error message when something goes wrong. The error message is
    logged to the configured logs.

    Note: The configured "productionExceptionHandler" is used if
    [\[SYS\]\[displayErrors\]](https://docs.typo3.org/permalink/t3coreapi:typo3confvars-sys-displayerrors@12.4) is set to "0"
    or is set to "-1" and
    [\[SYS\]\[devIPmask\]](https://docs.typo3.org/permalink/t3coreapi:typo3confvars-sys-devipmask@12.4) does not match the user's IP.

-   **debugExceptionHandler**

    -   *Type:* phpClass
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['debugExceptionHandler'\]
    -   *Default:* `\TYPO3\CMS\Core\Error\DebugExceptionHandler::class`

    Classname to handle exceptions that might happen in the TYPO3 code. Leave
    empty to disable the exception handling. The default exception handler
    displays the complete stack trace of any encountered exception. The error
    message and the stack trace is logged to the configured logs.

    Note: The configured "debugExceptionHandler" is used if
    [\[SYS\]\[displayErrors\]](https://docs.typo3.org/permalink/t3coreapi:typo3confvars-sys-displayerrors@12.4) is set to "1" or
    is set to "-1" or "2" and the [\[SYS\]\[devIPmask\]](https://docs.typo3.org/permalink/t3coreapi:typo3confvars-sys-devipmask@12.4)
    matches the users IP.

-   **errorHandler**

    -   *Type:* phpClass
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['errorHandler'\]
    -   *Default:* `TYPO3CMSCoreErrorErrorHandler::class`

    Classname to handle PHP errors.
    This class displays and logs all errors that are registered as
    [\[SYS\]\[errorHandlerErrors\]](https://docs.typo3.org/permalink/t3coreapi:typo3confvars-sys-errorhandlererrors@12.4).
    Leave empty to disable error handling. Errors will be logged and can be sent
    to the optionally installed developer log or to the `syslog` database table.
    If an error is registered in
    [\[SYS\]\[exceptionalErrors\]](https://docs.typo3.org/permalink/t3coreapi:typo3confvars-sys-exceptionalerrors@12.4)
    it will be turned into an exception to be handled by the configured
    exceptionHandler.

-   **errorHandlerErrors**

    -   *Type:* errors
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['errorHandlerErrors'\]
    -   *Default:* `E_ALL & ~(E_STRICT | E_NOTICE | E_COMPILE_WARNING | E_COMPILE_ERROR | E_CORE_WARNING | E_CORE_ERROR | E_PARSE | E_ERROR)`

    The E\_\* constants that will be handled by the
    [\[SYS\]\[errorHandler\]](https://docs.typo3.org/permalink/t3coreapi:typo3confvars-sys-errorhandler@12.4). Not all PHP error
    types can be handled:

    `E_USER_DEPRECATED` will always be handled, regardless of this setting.
    Default is 30466 =
    `E_ALL & ~(E_STRICT | E_NOTICE | E_COMPILE_WARNING | E_COMPILE_ERROR | E_CORE_WARNING | E_CORE_ERROR | E_PARSE | E_ERROR)`
    (see [PHP documentation](https://www.php.net/manual/en/errorfunc.constants.php)).

-   **exceptionalErrors**

    -   *Type:* errors
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['exceptionalErrors'\]
    -   *Default:* `E_ALL & ~(E_STRICT | E_NOTICE | E_COMPILE_WARNING | E_COMPILE_ERROR | E_CORE_WARNING | E_CORE_ERROR | E_PARSE | E_ERROR | E_DEPRECATED | E_USER_DEPRECATED | E_WARNING | E_USER_ERROR | E_USER_NOTICE | E_USER_WARNING)`

    The E\_\* constant that will be converted into an exception by the default
    [\[SYS\]\[errorHandler\]](https://docs.typo3.org/permalink/t3coreapi:typo3confvars-sys-errorhandler@12.4). Default is
    4096 = `E_ALL & ~(E_STRICT | E_NOTICE | E_COMPILE_WARNING | E_COMPILE_ERROR | E_CORE_WARNING | E_CORE_ERROR | E_PARSE | E_ERROR | E_DEPRECATED | E_USER_DEPRECATED | E_WARNING | E_USER_ERROR | E_USER_NOTICE | E_USER_WARNING)`
    (see [PHP documentation](https://www.php.net/manual/en/errorfunc.constants.php)).

    E_USER_DEPRECATED is always excluded to avoid exceptions to be thrown for deprecation messages.

-   **belogErrorReporting**

    -   *Type:* errors
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['belogErrorReporting'\]
    -   *Default:* `E_ALL & ~(E_STRICT | E_NOTICE)`

    Configures which PHP errors should be logged to the "syslog" database table
    (extension belog). If set to "0" no PHP errors are logged to the
    `sys_log` table. Default is 30711 =
    `E_ALL & ~(E_STRICT | E_NOTICE)`
    (see [PHP documentation](https://www.php.net/manual/en/errorfunc.constants.php)).

-   **generateApacheHtaccess**

    -   *Type:* bool
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['generateApacheHtaccess'\]
    -   *Default:* 1

    TYPO3 can create `.htaccess` files which are used by Apache Webserver.
    They are useful for access protection or performance improvements. Currently
    `.htaccess` files in the following directories are created,
    if they do not exist: typo3temp/compressor/.

    You want to disable this feature, if you are not running Apache or
    want to use own rule sets.

-   **ipAnonymization**

    -   *Type:* int
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['ipAnonymization'\]
    -   *Default:* 1
    -   *allowedValues:* 1 0 Disabled - Do not modify IP addresses at all 1 Mask the last byte for IPv4 addresses / Mask the Interface ID for IPv6 addresses (default) 2 Mask the last two bytes for IPv4 addresses / Mask the Interface ID and SLA ID for IPv6 addresses

    Configures if and how IP addresses stored via TYPO3s API should be anonymized
    ("masked") with a zero-numbered replacement. This is respected within
    anonymization task only, not while creating new log entries.

-   **systemMaintainers**

    -   *Type:* array
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['systemMaintainers'\]
    -   *Default:* null

    A list of backend user IDs allowed to access the Install Tool

-   **features**

    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['features'\]

    New features of TYPO3 that are activated on new installations but upgrading
    installations may still use the old behaviour.

    These settings are [feature toggles](https://docs.typo3.org/permalink/t3coreapi:feature-toggles@12.4) and can be
    changed in the Backend module **Settings** in the section
    **Feature Toggles**, but not in **Configure Installation-Wide Options**.

    -   **form.legacyUploadMimeTypes**

        -   *Type:* bool
        -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['features'\]\['form.legacyUploadMimeTypes'\]
        -   *Default:* true

        If on, some mime types are predefined for the "FileUpload" and "ImageUpload"
        elements of the "form" extension, which always allows file uploads of these
        types, no matter the specific form element definition.

    -   **redirects.hitCount**

        -   *Type:* bool
        -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['features'\]\['redirects.hitCount'\]
        -   *Default:* false

        If on, and if extension "redirects" is loaded, each performed redirect is
        counted and last hit time is logged to the database.

    -   **security.backend.enforceReferrer**

        -   *Type:* bool
        -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['features'\]\['security.backend.enforceReferrer'\]
        -   *Default:* true

        If on, HTTP referrer headers are enforced for backend and install tool requests to mitigate
        potential same-site request forgery attacks. The behavior can be disabled in case HTTP proxies filter
        required referer header. As this is a potential security risk, it is recommended to enable this option.

    -   **security.backend.enforceContentSecurityPolicy**

        -   *Type:* bool
        -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['features'\]\['security.backend.enforceContentSecurityPolicy'\]
        -   *Default:* false (for existing installations), true (for new installations)

        <!-- TODO: no Markdown rendering for "versionadded" -->

        If enabled, the [Content Security Policy](https://docs.typo3.org/permalink/t3coreapi:content-security-policy@12.4)
        is applied in backend scope.

        > [!NOTE]
        > With TYPO3 v13.0 this feature setting is always enabled.

    <!-- TODO: no Markdown rendering for "versionadded" -->

    -   **security.frontend.enforceContentSecurityPolicy**

        -   *Type:* bool
        -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['features'\]\['security.frontend.enforceContentSecurityPolicy'\]
        -   *Default:* false

        If enabled, the [Content Security Policy](https://docs.typo3.org/permalink/t3coreapi:content-security-policy@12.4)
        is enforced in frontend scope (HTTP header `Content-Security-Policy`).

        This option can be enabled in combination with
        [security.frontend.reportContentSecurityPolicy](https://docs.typo3.org/permalink/t3coreapi:confval-globals-typo3-conf-vars-sys-features-security-frontend-reportcontentsecuritypolicy@12.4).
        Then both headers are set.

    -   **security.frontend.reportContentSecurityPolicy**

        -   *Type:* bool
        -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['features'\]\['security.frontend.reportContentSecurityPolicy'\]
        -   *Default:* false

        <!-- TODO: no Markdown rendering for "versionadded" -->

        If enabled, the [Content Security Policy](https://docs.typo3.org/permalink/t3coreapi:content-security-policy@12.4)
        is applied in frontend scope as report-only (HTTP header
        `Content-Security-Policy-Report-Only`).

        This option can be enabled in combination with
        [security.frontend.enforceContentSecurityPolicy](https://docs.typo3.org/permalink/t3coreapi:confval-globals-typo3-conf-vars-sys-features-security-frontend-enforcecontentsecuritypolicy@12.4).
        Then both headers are set.

    -   **security.frontend.allowInsecureFrameOptionInShowImageController**

        -   *Type:* bool
        -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['features'\]\['security.frontend.allowInsecureFrameOptionInShowImageController'\]
        -   *Default:* false

        <!-- TODO: no Markdown rendering for "versionadded" -->

        This option configures,  whether the show image controller (eID
        `tx_cms_showpic`) is allowed to supply an unsecured `&frame` URI
        parameter for backwards compatibility. The `&frame` parameter is not
        utilized by the TYPO3 core itself anymore.

        It is disabled by default and is strongly suggested to leave it
        turned off, for details see [Important: #103306 - Frame GET parameter in tx_cms_showpic eID disabled](https://docs.typo3.org/c/typo3/cms-core/main/en-us/Changelog/11.5.x/Important-103306-FrameGETParameterInTx_cms_showpicEIDDisabled.html#important-103306-1714976257). To enable it:

        ```php
        $GLOBALS['TYPO3_CONF_VARS']['SYS']['features']['security.frontend.allowInsecureFrameOptionInShowImageController'] = true;
        ```

    <!-- TODO: no Markdown rendering for "versionadded" -->

    -   **security.frontend.allowInsecureSiteResolutionByQueryParameters**

        -   *Type:* bool
        -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['features'\]\['security.frontend.allowInsecureSiteResolutionByQueryParameters'\]
        -   *Default:* false

        > [!NOTE]
        > This change was introduced as part of the
        > [TYPO3 12.4.4 and 11.5.30 security releases](https://typo3.org/security/advisory/typo3-core-sa-2023-003).

        Resolving sites by the `id` and `L` HTTP query parameters is now denied by
        default. However, it is still allowed to resolve a particular page by, for
        example, "example.org" - as long as the page ID `123` is in the scope of the
        site configured for the base URL "example.org".

        The flag can be used to reactivate the previous behavior:

        ```php
        $GLOBALS['TYPO3_CONF_VARS']['SYS']['features']['security.frontend.allowInsecureSiteResolutionByQueryParameters'] = true;
        ```

    -   **security.usePasswordPolicyForFrontendUsers**

        -   *Type:* bool
        -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['features'\]\['security.usePasswordPolicyForFrontendUsers'\]
        -   *Default:* false for existing installations, true for new installations

        <!-- TODO: no Markdown rendering for "versionadded" -->

        Password validation configured through
        `plugin.tx_felogin_login.settings.passwordValidators` has been
        marked as deprecated, but will still be used for password validation when
        a user resets the password, if this feature toggle is set to `false`.

        If the feature toggle is set to `true`, the globally configured
        [password policy](https://docs.typo3.org/permalink/t3coreapi:password-policies@12.4) is applied when a TYPO3 frontend
        user resets the password.

        > [!NOTE]
        > **See also**
        >
        > [$GLOBALS\['TYPO3_CONF_VARS'\]\['FE'\]\['passwordPolicy'\]](https://docs.typo3.org/permalink/t3coreapi:typo3confvars-fe-passwordpolicy@12.4)

-   **availablePasswordHashAlgorithms**

    -   *Type:* array
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['availablePasswordHashAlgorithms'\]
    -   *Default:* 1

    A list of available password hash mechanisms. Extensions may register
    additional mechanisms here.

-   **$GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['linkHandler'\]**

    -   *Type:* array
    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['linkHandler'\]

    Links entered in the TYPO3 backend are stored in an internal format in the
    database, like `t3://page?uid=42`. The handlers for the different resource
    keys (like `page` in the example) are registered as link handlers.

    The TYPO3 Core registers the following link handlers:

    -   `page` (see [EXT:core/Classes/LinkHandling/PageLinkHandler.php (GitHub)](https://github.com/typo3/typo3/blob/12.4/typo3/sysext/core/Classes/LinkHandling/PageLinkHandler.php))
    -   `file` (see [EXT:core/Classes/LinkHandling/FileLinkHandler.php (GitHub)](https://github.com/typo3/typo3/blob/12.4/typo3/sysext/core/Classes/LinkHandling/FileLinkHandler.php))
    -   `folder` (see [EXT:core/Classes/LinkHandling/FolderLinkHandler.php (GitHub)](https://github.com/typo3/typo3/blob/12.4/typo3/sysext/core/Classes/LinkHandling/FolderLinkHandler.php))
    -   `url` (see [EXT:core/Classes/LinkHandling/UrlLinkHandler.php (GitHub)](https://github.com/typo3/typo3/blob/12.4/typo3/sysext/core/Classes/LinkHandling/UrlLinkHandler.php))
    -   `email` (see [EXT:core/Classes/LinkHandling/EmailLinkHandler.php (GitHub)](https://github.com/typo3/typo3/blob/12.4/typo3/sysext/core/Classes/LinkHandling/EmailLinkHandler.php))
    -   `record` (see [EXT:core/Classes/LinkHandling/RecordLinkHandler.php (GitHub)](https://github.com/typo3/typo3/blob/12.4/typo3/sysext/core/Classes/LinkHandling/RecordLinkHandler.php))
    -   `telephone` (see [EXT:core/Classes/LinkHandling/TelephoneLinkHandler.php (GitHub)](https://github.com/typo3/typo3/blob/12.4/typo3/sysext/core/Classes/LinkHandling/TelephoneLinkHandler.php))

    Additional link handlers can be added by extensions.

    > [!NOTE]
    > **See also**
    >
    > [Link handling](https://docs.typo3.org/permalink/t3coreapi:linkhandling@12.4)

-   **lang**

    -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['lang'\]

    -   **requireApprovedLocalizations**

        -   *Type:* bool
        -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['lang'\]\['requireApprovedLocalizations'\]
        -   *Default:* true

        <!-- TODO: no Markdown rendering for "versionadded" -->

        Before TYPO3 v12.0 all translations are taken into account when parsing XLF
        files. As of TYPO3 v12.0, only approved translations are available by
        default.The attribute `approved` of the [XLIFF](https://docs.typo3.org/permalink/t3coreapi:xliff@12.4) standard is
        respected by TYPO3 since version 12.0 when parsing XLF files. This attribute
        can either have the value `yes` or `no` and indicates whether the
        translation is final or not.

        **EXT:my_extension/Resources/Private/Language/locallang.xml**

        ```xml
        <trans-unit id="label2" approved="yes">
            <source>This is label #2</source>
            <target>Ceci est le libellé no. 2</target>
        </trans-unit>
        ```

        This setting can be used to control the behavior:

        -   **`true`**

            Only translations with the attribute `approved` set to `yes`
            will be used. Any non-approved translation (value is set to `no`)
            will be ignored. If the attribute `approved` is omitted, the
            translation is still taken into account.

        -   **`false`**

            All translations are used.

-   **messenger**

    -   **routing**

        -   *Type:* array
        -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['messenger'\]\['routing'\]

        <!-- TODO: no Markdown rendering for "versionadded" -->

        The configuration of the routing for the
        [messenger component](https://docs.typo3.org/permalink/t3coreapi:message-bus@12.4). By default, TYPO3 uses a
        synchronous transport (`default`) for all messages (`*`):

        ```php
        $GLOBALS['TYPO3_CONF_VARS']['SYS']['messenger']['routing'] = [
            '*' => 'default',
        ];
        ```

        You can set a different transport for a specific message, for example:

        ```php
        $GLOBALS['TYPO3_CONF_VARS']['SYS']['messenger']['routing'][\MyVendor\MyExtension\Queue\Message\DemoMessage::class]
            = 'doctrine';
        ```

        > [!NOTE]
        > **See also**
        >
        > ["Everyday" usage - as a system administrator/integrator](https://docs.typo3.org/permalink/t3coreapi:message-bus-routing@12.4)

-   **FileInfo**

    -   **fileExtensionToMimeType**

        -   *Type:* array
        -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['FileInfo'\]\['fileExtensionToMimeType'\]

        <!-- TODO: no Markdown rendering for "versionchanged" -->

        This file extension-based MIME type mapping is now superseded
        by the more fine-grained MIME type compatibility list
        $GLOBALS['TYPO3_CONF_VARS']['SYS']['FileInfo']['mimeTypeCompatibility'].`$GLOBALS['TYPO3_CONF_VARS']['SYS']['FileInfo']['fileExtensionToMimeType']`
        is supported for backward compatibility reasons.

    -   **mimeTypeCompatibility**

        -   *Type:* array
        -   *Path:* $GLOBALS\['TYPO3_CONF_VARS'\]\['SYS'\]\['FileInfo'\]\['mimeTypeCompatibility'\]
        -   *Default:* see [EXT:core/Configuration/DefaultConfiguration.php](https://github.com/TYPO3/typo3/blob/006db645e4716529390fc3f07d84fe36b8694c43/typo3/sysext/core/Configuration/DefaultConfiguration.php#L369)

        <!-- TODO: no Markdown rendering for "versionadded" -->

        This mapping supersedes
        $GLOBALS['TYPO3_CONF_VARS']['SYS']['FileInfo']['fileExtensionToMimeType']For each generic MIME type (as detected by PHP MIME type detection) a
        map from file extension to allowed concrete MIME type can be supplied.

        The Core predefines common file extensions and MIME types. Custom ones
        can be configured additionally.

        Since PHP file detection methods can not reliable detect all IANA defined MIME
        types, mime-db based heuristics are applied to map generic MIME types like
        `text/plain` to `text/csv` for `*.csv` files.

        Example that is already shipped with TYPO3, a `*.jfif` file that is
        detected as image/jpeg is mapped to image/pjpeg, which is the
        defined MIME type per IANA and enforced by the FAL persistence layer.

        **Example from the TYPO3 Core**

        ```php
        $GLOBALS['TYPO3_CONF_VARS']['SYS']['FileInfo']['mimeTypeCompatibility']['image/jpeg']['jfif'] =
            'image/pjpeg';
        ```

        Generic example, which allows a file ending in `*.foo` that is detected
        to contain text/plain contents to be mapped to the MIME type text/x-foo,
        other contents (e.g. if the file contains binary data) will not be mapped

        **config/system/additional.php**

        ```php
        $GLOBALS['TYPO3_CONF_VARS']['SYS']['FileInfo']['mimeTypeCompatibility']['text/plain']['foo'] =
            'text/x-foo';
        ```
