dmk / mk30xlegacy
DMK auto redirects to legacy/mirror/stale environment.
Installs: 2 873
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 5
Forks: 0
Open Issues: 0
Type:typo3-cms-extension
Requires
- typo3/cms-core: ^11.5
Requires (Dev)
- captainhook/captainhook: ^5.10
- friendsofphp/php-cs-fixer: ^3.3
- helmich/typo3-typoscript-lint: ^2.5
- nimut/testing-framework: ^6.0
- php-parallel-lint/php-parallel-lint: ^1.3
- phpcompatibility/php-compatibility: ^10.x-dev
- phpmd/phpmd: ^2.11.1
- phpspec/prophecy-phpunit: ^2.0.1
- phpstan/extension-installer: ^1.1
- phpstan/phpstan: ^1.1
- phpunit/phpunit: ^9.5
- pimple/pimple: ^3.5.0
- saschaegerer/phpstan-typo3: ^1.0
- sebastian/phpcpd: ^6.0
This package is auto-updated.
Last update: 2024-10-08 14:08:47 UTC
README
This TYPO3 extension performs automatic redirects to a legacy domain if the requested uri was not found at the TYPO3.
What it does in short:
- 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.
Installation
Install TYPO3 via composer.
From project root you need to run
composer require dmk/mk30xlegacy
Configuration
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)
Add Custom Matcher
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
Custom legacy uri manipulation
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