Versione Drupal

Supponiamo di avere un controller con un metodo che effettua un redirect ad un sito esterno:

class Controller extends ControllerBase {
  public function redirectToWebsite() {
    return new RedirectResponse('https://google.com')
  }
}

Questo non funzionerà, dato che le RedirectResponse di Symfony in Drupal non funzionano se non si effettua il redirect a URL interni al proprio sito Drupal.

Drupal infatti ci suggerisce di utilizzare un TrustedRedirectResponse:

class Controller extends ControllerBase {
  public function redirectToWebsite() {
    return new TrustedRedirectResponse('https://google.com')
  }
}

Ci sono però casi in  cui neanche questo funziona. Perciò, è meglio usare le classiche Response di symfony:

class Controller extends ControllerBase {
  public function redirectToWebsite() {
    return $this->createExternalRedirectResponse('https://google.com')
  }

  /**
   * Create a response that will redirect to an external URL.
   */
  private function createExternalRedirectResponse(string $url): Response {
    $response = new Response('', 302, []);
    $response->setContent(sprintf('Redirecting to %1$s.', htmlspecialchars($url, ENT_QUOTES, 'UTF-8')));
    $response->headers->set('Location', $url);
    return $response;
  }
}

Fonte: https://drupal.stackexchange.com/a/286307