This TYPO3 extension performs automatic redirects to a legacy domain if the requested uri was not found at the TYPO3.
- Registers a middleware.
- Checks the TYPO3 response for unavailable status code.
- asks matchers for the uri to the new or old source to redirect to
- PageTypeSuffixRemovalMatcher:
Checks whether the url has a suffix and whether the url exists without an ending.
(Core SiteMatcher finds the uri or a HEAD request returns 200 status code). - LegacyUriMatcher:
Checks if the request uri is available at the legacy domain
(returns 200 status code on HEAD request).
- PageTypeSuffixRemovalMatcher:
- Performs a redirect to the new uri.
Install TYPO3 via composer.
From project root you need to run
composer require dmk/mk30xlegacy
The base configuration is done by extension configuration.
Use The Admin Tools > Settings > Configure Extensions module to configure mk30xlegacy.
The configuration can be overridden by site configuration
or site language configuration.
Use the Site Management > Sites module to configure the extension.
- enabled
Enables the legacy redirect middleware. (default: 1) - responseMatchPattern
Response match pattern: Regex to match with current request http response code to perform legacy redirect. (default: [345]\d\d) - suffixRemovalSuffixes
Page Type Suffixes: A comma seperated list of suffixes to remove from request uri. (default: html,htm,xhtml) - redirectDomain
Redirect Domain: Domain to performe the legacy redirect to. - redirectDomainAvailabilityMatchPattern
Legacy availability match pattern: Regex to match with http response code from legacy check. On match a redirect to legacy domain will be performed. (default: 2\d\d) - redirectResponseStatusCode
Redirect Response HTTP-Status-Code: The HTTP-Status Code used for redirects to legacy domain. (default: 307)
The redirect middleware uses a matcher registry, so custom matchers can be developed.
class CustomMatcher implements MatcherInterface
{
public function isMatchableResponse(ResponseInterface $response): bool
{
// check here if this matcher is enabled for the typo3 response!
return true;
}
public function matchRequest(ServerRequestInterface $request, ResponseInterface $response): UriResult
{
$result = new UriResult();
// add your custom stuff here,
// to create an uri result (for redirect)
// depending on the request and response
return $result
}
}
Add the custom matcher in your Services.yaml
:
DMK\MyAwesomeExtension\Routing\Matcher\CustomMatcher:
tags:
-
name: 'mk30xlegacy.routing.matcher'
priority: 100
You can register an event listener before the availability check of the LegacyUriMatcher is performed, to manipulate the legacy url by your own (we recommend to use a custom matcher instead!):
class LegacyUriMatchEventListener
{
public function __invoke(UriMatchPreAvailabilityCheckEvent $event): void
{
$uri = $event->getResult()->getUri();
// manipulate the url here, add query parameters for example.
$uri = $uri->withQuery('?legacy=redirect&'.$uri->getQuery());
$event->getResult()->setUri($uri);
}
}
Add the custom listener in your Services.yaml
:
services:
DMK\MyAwesomeExtension\Event\EventListener\LegacyUriMatchEventListener:
tags:
-
name: 'event.listener'
identifier: 'MyAwesomeLegacyUriMatchEventListener'
event: DMK\Mk30xLegacy\System\Event\UriMatchPreAvailabilityCheckEvent