For coders TYPO3 Tech Corner

[PHP] TYPO3 Log Einträge "The page is not configured! [type=...][]" vermeiden

[PHP] TYPO3 Log Einträge "The page is not configured! [type=...][]" vermeiden

Kennt ihr das auch? Ihr habt schon lange keinen TypeNum 98, 99, 100 oder 3135 mehr in eurer Konfiguration der Website und dennoch gibt es immer noch solche Requests auf eure Seite. Diese führen dann zu einer Fehlermeldung und einem Status 500. Wenn ihr nicht alle diese Types in der .htaccess blocken wollt, könnt ihr euch auch über PSR-15 Middleware bereits relativ früh ins System hängen und den angeforderten Type mit den Type-Settings in der Site Konfiguration abgleichen. Im nachfolgenden Beispiel leiten wir solche Anfragen dann einfach auf die Startseite mit dem Headercode 301.

EXT:sitepackage/Configuration/RequestMiddlewares.php:

<?php return [ 'frontend' => [ 'sitepackage-undefinedtypenumerrorhandling' => [ 'target' => \Vendor\Sitepackage\Middleware\UndefinedTypeNumErrorHandling::class, 'before' => [ 'typo3/cms-redirects/redirecthandler' ], 'after' => [ 'typo3/cms-frontend/site', ] ] ] ];

EXT:sitepackage/Classes/Middleware/UndefinedTypeNumErrorHandling.php:

<?php declare(strict_types=1); namespace Vendor\Sitepackage\Middleware; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; use Psr\Http\Server\RequestHandlerInterface; use TYPO3\CMS\Core\Http\RedirectResponse; use TYPO3\CMS\Core\Site\Entity\Site; /** * Class UndefinedTypeNumErrorHandling * to simply redirect to "/" if a typeNum is given, that is not defined in siteconfiguration. * This avoids annoying log entries and delivers a 301 to the (e.g.) bot that is calling the outdated url. */ class UndefinedTypeNumErrorHandling implements MiddlewareInterface { /** * @param ServerRequestInterface $request * @param RequestHandlerInterface $handler * @return ResponseInterface */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { if ($this->isTypeNumSet($request) && $this->isTypeNumAllowed($request) === false) { return new RedirectResponse('/', 301); } return $handler->handle($request); } /** * @param ServerRequestInterface $request * @return bool */ protected function isTypeNumSet(ServerRequestInterface $request): bool { if (array_key_exists('type', $request->getQueryParams())) { return $request->getQueryParams()['type'] > 0; } return false; } /** * @param ServerRequestInterface $request * @return bool */ protected function isTypeNumAllowed(ServerRequestInterface $request): bool { /** @var Site $site */ $site = $request->getAttribute('site'); if (!empty($site->getConfiguration()['routeEnhancers']['PageTypeSuffix']['map'])) { $allowedTypeNums = array_values($site->getConfiguration()['routeEnhancers']['PageTypeSuffix']['map']); return in_array($request->getQueryParams()['type'], $allowedTypeNums); } return false; } }

Hinweis: Wenn ihr dieses oder ein ähnliches Snippet verwendet, müsst ihr darauf achten, dass alle eure TypeNum-Definitionen auch in der Site-Configuration aufgenommen wurde - z.B.:

rootPageId: 1 routes: - route: robots.txt type: staticText content: "Disallow: /typo3/\r\n" routeEnhancers: PageTypeSuffix: type: PageType default: / index: '' suffix: / map: print.html: 99 preview.html: 1560777975 newsletter.html: 1562349004 pixel.png: 1561894816

Zurück

Kennst du das: Immer nur schnell schnell?

Wie wäre es einmal mit Zeit und Respekt für Codequalität? Arbeiten im Team? Automatisierte Tests?

Komm zu uns