Prob. there are better ways or alternatives, but the next way works for me!
A route definition:
keboca.another_route:
path: '/something/else'
defaults:
uri: '/valid_uri'
_controller: '\Drupal\keboca\Controller\KController::forward'
The trick happens here:
<?php
namespace Drupal\keboca\Controller;
use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\HttpKernelInterface;
/**
* Returns responses for KEBOCA routes.
*/
class KController extends ControllerBase {
/**
* Forwards the request to a valid URI.
*
* @param string $uri
*
* @return \Symfony\Component\HttpFoundation\Response
* @throws \Exception
*/
public function forward(string $uri) {
// Init a sub request based on the current request.
$request = \Drupal::request();
$subRequest = Request::create($uri,
$request->getMethod(),
$request->query->all(),
$request->cookies->all(),
$request->files->all(),
$request->server->all(),
$request->getContent()
);
/** @var \Symfony\Component\HttpKernel\HttpKernelInterface $httpKernel */
$httpKernel = \Drupal::service('http_kernel');
return $httpKernel->handle($subRequest, HttpKernelInterface::SUB_REQUEST);
}
}