core/lib/Drupal/Core/Routing/RequestFormatRouteFilter.php | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/core/lib/Drupal/Core/Routing/RequestFormatRouteFilter.php b/core/lib/Drupal/Core/Routing/RequestFormatRouteFilter.php index 8119efa..3c171d2 100644 --- a/core/lib/Drupal/Core/Routing/RequestFormatRouteFilter.php +++ b/core/lib/Drupal/Core/Routing/RequestFormatRouteFilter.php @@ -23,7 +23,20 @@ public function applies(Route $route) { * {@inheritdoc} */ public function filter(RouteCollection $collection, Request $request) { - $format = $request->getRequestFormat('html'); + // Determine the request format. By default, use 'html' as the default + // format. But when there's only a single route match, and that route + // specifies a '_format' requirement listing a single format, then use that + // as the default format. + $default_format = 'html'; + if ($collection->count() === 1) { + $only_route = $collection->getIterator()->current(); + $required_format = $only_route->getRequirement('_format'); + if (strpos($required_format, '|') === FALSE) { + $default_format = $required_format; + } + } + $format = $request->getRequestFormat($default_format); + /** @var \Symfony\Component\Routing\Route $route */ foreach ($collection as $name => $route) { // If the route has no _format specification, we move it to the end. If it