---
title: "System Setup"
manual: "Kitodo.Presentation"
version: "dev-demo"
source: "Configuration/Index.rst"
rendered: "2026-09-27T16:21:24+00:00"
---

# System Setup {#system-setup}

-   [Web Server](#web-server)
-   [TYPO3 Setup](#typo3-setup)
-   [Solr Installation](#solr-installation)

## Web Server {#web-server}

### Content Security Policy {#content-security-policy}

In case a Content Security Policy is set on the Kitodo.Presentation instance, make sure that `blob:` URLs are allowed as `img-src`.
Otherwise, the page view may remain blank.

## TYPO3 Setup {#typo3-setup}

### Extension Configuration {#extension-configuration}

You should check the extension configuration!

-   go to the Extension Configuration (`ADMIN TOOLS -> Settings -> Extension Configuration`).
-   open dlf
-   check and save the configuration

### Tenant Configuration {#tenant-configuration}

You must create a data folder for some Kitodo.Presentation configuration records like metadata,
structures, solrCore and formats (namespaces). This can be achieved easily with the 'New Tenant'
backend module on the left side in section 'Tools'.

Make sure, all fields are green. Then all necessary records are created.

### TYPO3 Configuration {#typo3-configuration}

#### Disable caching in certain situations {#disable-caching-in-certain-situations}

##### Navigation Plugin {#navigation-plugin}

The *navigation plugin* provides a page selection dropdown input field. The
resulting action url cannot contain a valid cHash value.

The default behaviour of TYPO3 is to call the pageNotFound handler and/or
to show an exception:

![TYPO3 Error-Message "Reason: Request parameters could not be validated (&cHash empty)"](../Images/Configuration/typo3_pagenotfoundonchasherror.png)

This is not the desired behaviour. You should disable
`$TYPO3_CONF_VARS['FE']['pageNotFoundOnCHashError'] = 0` to show the
requested page instead. The caching will be disabled in this case. This was
the default behaviour before TYPO3 6.x.

![TYPO3 Configuration of pageNotFoundOnCHashError in Install Tool](../Images/Configuration/New_TYPO3_site.png)

This configuration is written to *typo3conf/LocalConfiguration.php*:

```php
'FE' => [
        'pageNotFoundOnCHashError' => '0',
    ],

```

##### Avoid empty Workview {#avoid-empty-workview}

You may notice from time to time, the viewer page stays empty even though you
pass the `tx_dlf[id]` parameter.

This happens, if someone called the viewer page without any parameters or with parameters
without a valid cHash. In this case, TYPO3 saves the page to its cache. If you call the
viewer page again with any parameter and without a cHash, the cached page is
delivered.

With the search plugin or the searchInDocument tool this may disable the search functionality.

To avoid this, you must configure `tx_dlf[id]` to require a cHash. Of
course this is impossible to achieve so the system will process the page uncached.

Add this setting to your *typo3conf/LocalConfiguration.php*:

```php
'FE' => [
    'cacheHash' => [
        'requireCacheHashPresenceParameters' => [
            'tx_dlf[id]',
        ],
    ],
]

```

Tip: Use the admin backend module: Settings -> Configure Installation-Wide Options

#### TypoScript Basic Configuration {#typoscript-basic-configuration}

Please include the Template "Basic Configuration (dlf)". This template adds
jQuery to your page by setting the following typoscript:

`page.includeJSFooterlibs.jQuery`

#### Slug Configuration {#slug-configuration}

With TYPO3 9.5 it is possible to make speaking urls with the builtin advanced
routing feature ("Slug"). This may be used for extensions too.

TYPO3 documentation about [Advanced Routing Configuration](https://docs.typo3.org/m/typo3/reference-coreapi/9.5/en-us/ApiOverview/Routing/AdvancedRoutingConfiguration.html).

The following code is an example of an routeEnhancer for the workview page on uid=14.

```yaml
routeEnhancers:
  KitodoWorkview:
    type: Plugin
    namespace: tx_dlf
    limitToPages:
      - 14
    routePath: '/{id}/{page}'
    requirements:
      id: '(\d+)|(http.*xml)'
      page: \d+
  KitodoWorkviewDouble:
    type: Plugin
    namespace: tx_dlf
    limitToPages:
      - 14
    routePath: '/{id}/{page}/{double}'
    requirements:
      id: '(\d+)|(http.*xml)'
      page: \d+
      double: '[0-1]'
```

## Solr Installation {#configuration-solr}

This extension doesn't include Solr, but just a prepared configuration set.
To setup Apache Solr, perform the following steps:

1.  Make sure you have Apache Solr 8.11 or 9.x installed and running.

    Download Solr from [https://solr.apache.org/downloads.html](https://solr.apache.org/downloads.html).
    Other versions may work but are not tested.
1.  Copy the config set to your solr home

```bash
cp -r EXT:dlf/Configuration/ApacheSolr/configsets/dlf $SOLR_HOME/configsets/
```

1.  Get the Solr OCR Highlighting plugin and put it into the modules directory.

    The plugin is available on GitHub: [https://github.com/dbmdz/solr-ocrhighlighting/releases](https://github.com/dbmdz/solr-ocrhighlighting/releases).
    The documentation can be found here: [https://dbmdz.github.io/solr-ocrhighlighting/](https://dbmdz.github.io/solr-ocrhighlighting/).

    The Solr OCR Highlighting plugin is required for full text search as of Kitodo.Presentation 3.3.
    Version 0.9.1 is the minimum version. Choose the build for your Solr major version (8 or 9).

```bash
cp solr-ocrhighlighting-0.9.1.jar $SOLR_HOME/modules/ocrsearch/lib/
```

1.  Using basic authentication is optional but recommended.

    The documentation is available here:
    [https://solr.apache.org/guide/8_8/basic-authentication-plugin.html](https://solr.apache.org/guide/8_8/basic-authentication-plugin.html)
