2 declare(strict_types = 1);
18 use Psr\Http\Message\ResponseInterface;
19 use Psr\Http\Message\ServerRequestInterface;
20 use Psr\Http\Message\UriInterface;
21 use Psr\Http\Server\MiddlewareInterface;
22 use Psr\Http\Server\RequestHandlerInterface;
23 use Psr\Log\LoggerAwareInterface;
24 use Psr\Log\LoggerAwareTrait;
48 public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
50 $redirectService = GeneralUtility::makeInstance(RedirectService::class);
51 $port = $request->getUri()->getPort();
52 $matchedRedirect = $redirectService->matchRedirect(
53 $request->getUri()->getHost() . ($port ?
':' . $port :
''),
54 $request->getUri()->getPath(),
55 $request->getUri()->getQuery() ??
''
59 if (is_array($matchedRedirect)) {
60 $url = $redirectService->getTargetUrl($matchedRedirect, $request->getQueryParams(), $request->getUri(), $request->getAttribute(
'site',
null));
61 if ($url instanceof UriInterface) {
62 $this->logger->debug(
'Redirecting', [
'record' => $matchedRedirect,
'uri' => $url]);
70 return $handler->handle($request);
84 (
int)$redirectRecord[
'target_statuscode'],
85 [
'X-Redirect-By' =>
'TYPO3 Redirect ' . $redirectRecord[
'uid']]
97 if (!GeneralUtility::makeInstance(Features::class)->isFeatureEnabled(
'redirects.hitCount') || $redirectRecord[
'disable_hitcount']) {
100 $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
101 ->getQueryBuilderForTable(
'sys_redirect');
103 ->update(
'sys_redirect')
105 $queryBuilder->expr()->eq(
'uid', $queryBuilder->createNamedParameter($redirectRecord[
'uid'], \PDO::PARAM_INT))
107 ->set(
'hitcount', $queryBuilder->quoteIdentifier(
'hitcount') .
'+1',
false)
108 ->set(
'lasthiton',
$GLOBALS[
'EXEC_TIME'])