Symfony редирект с одного домена на другой

У меня есть сайт Symfony 4.2, который обслуживает контент на двух поддоменах:

a.example.com

b.example.com

Как я могу перенаправить запросы, сделанные для /resetting/reset/ на a, на b, сохраняя при этом строку запроса?

Я пробовал ниже, но ничего не делает - т. е. когда я нажимаю a.example.com/resetting/reset, он просто остается там. Нет ошибок.

resetting:
    host: ^%a_domain%$
    path: ^/resetting/reset/
    controller: Symfony\Bundle\FrameworkBundle\Controller\RedirectController::urlRedirectAction
    defaults:
        path: '%b_domain%/resetting/reset/'
        permanent: true
        keepQueryParams: true

Любые идеи были бы хорошы!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
806
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я не смог заставить работать подход yaml, поэтому вместо этого я перезаписал маршрут пользовательским действием перенаправления следующим образом:

/**
 * @Route("/resetting/reset/{token}",
 *     name = "fos_user_resetting_reset_override",
 *     host = "{domain}",
 *     defaults = {"domain" = "%a_domain%"},
 *     requirements = {"domain" = "(%a_domain%)"},
 * )
 */
public function redirectResettingRouteToBDomain(string $token): RedirectResponse
{
    // generate the current url with an absolute path
    $path = $this->generateUrl(
        'fos_user_resetting_reset',
        ['token' => $token],
        UrlGeneratorInterface::ABSOLUTE_PATH
    );

    // replace A_DOMAIN with B_DOMAIN in the path
    $domain = preg_replace(
        '/' . preg_quote(getenv('A_DOMAIN'), '/') . '/',
        getenv('B_DOMAIN'),
        $this->getRequest()->server->get('HTTP_HOST')
    );

    // ensure the redirect works on http and https
    $url = '//' . $domain . $path;

    return $this->redirect($url);
}

Обратите внимание, что я настроил env vars для A_DOMAIN и B_DOMAIN, а затем сделал их доступными как параметры a_domain и b_domain.

По сути, описанное выше действие контроллера запускается только для A_DOMAIN, переопределяя маршрут fos_user_resetting_reset по умолчанию для B_DOMAIN, а затем перенаправляет запрос.

Измените хост следующим образом, используя класс маршрутизатора:

$this->router->getContext()->setHost($host);
//$url = $this->router->generate('routeName');
//return $event->setResponse(new RedirectResponse($url));
return $this->redirectToRoute('routeName');

Другие вопросы по теме