diff --git a/src/EventSubscriber/RouteNormalizerRequestSubscriber.php b/src/EventSubscriber/RouteNormalizerRequestSubscriber.php index ea848d8..433172f 100644 --- a/src/EventSubscriber/RouteNormalizerRequestSubscriber.php +++ b/src/EventSubscriber/RouteNormalizerRequestSubscriber.php @@ -9,6 +9,7 @@ use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\HttpKernel\Event\GetResponseEvent; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpFoundation\RedirectResponse; +use Symfony\Cmf\Component\Routing\RouteObjectInterface; /** * Normalizes GET requests performing a redirect if required. @@ -102,14 +103,20 @@ class RouteNormalizerRequestSubscriber implements EventSubscriberInterface { * @return bool */ protected function shouldRedirect(GetResponseEvent $event) { - return $this->routeNormalizerEnabled + if ($request = $event->getRequest()) { + $route_match = \Drupal::service('router.no_access_checks')->matchRequest($request); + $route = $route_match[RouteObjectInterface::ROUTE_OBJECT]; + return $this->routeNormalizerEnabled && $event->isMasterRequest() - && ($request = $event->getRequest()) && ($request->isMethod('GET') || $request->isMethod('HEAD')) && !$request->query->has('destination') && RequestHelper::isCleanUrl($request) && !$request->attributes->get('_disable_route_normalizer') - && !\Drupal::config('redirect.settings')->get('ignore_admin_path'); + && (!\Drupal::config('redirect.settings')->get('ignore_admin_path') || !\Drupal::service('router.admin_context')->isAdminRoute($route)); + } + else { + return false; + } } /** diff --git a/src/Tests/GlobalRedirectTest.php b/src/Tests/GlobalRedirectTest.php index 519096b..ed8a770 100644 --- a/src/Tests/GlobalRedirectTest.php +++ b/src/Tests/GlobalRedirectTest.php @@ -157,8 +157,14 @@ class GlobalRedirectTest extends WebTestBase { $this->config->set('ignore_admin_path', FALSE)->save(); $this->assertRedirect('admin/config/system/site-information', 'site-info'); + // Test alias normalization again with ignore_admin_path false. + $this->assertRedirect('Test-node', 'test-node'); + $this->config->set('ignore_admin_path', TRUE)->save(); $this->assertRedirect('admin/config/system/site-information', NULL, 'HTTP/1.1 200 OK'); + + // Test alias normalization again with ignore_admin_path true. + $this->assertRedirect('Test-node', 'test-node'); } /**