У меня есть сайт 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
Любые идеи были бы хорошы!




Я не смог заставить работать подход 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');