gpt4 book ai didi

php - 根据内核请求重定向

转载 作者:行者123 更新时间:2023-12-04 00:38:10 25 4
gpt4 key购买 nike

我项目的网站可以通过子域访问,例如https://1234.example.com 子域由四个数值组成,代表特殊用户实体的 ID。因此,当发出请求时,我必须检查该 id 是否真的存在,如果不存在,我想重定向到根 url https://www.example.com。如果用户使用了正确的 ID,则无需执行任何操作。我创建了一个事件监听器并检查了 id 是否存在。这像预期的那样工作。但是重定向到根 url 将不起作用:

public function onKernelRequest(GetResponseEvent $event)
{
if ($event->getRequestType() !== HttpKernel::MASTER_REQUEST) {
return;
}

$request = $event->getRequest();

$hostArray = explode('.', $request->getHost());
$subdomain = $hostArray[0];

array_shift($hostArray);
$host = implode('.', $hostArray);

if (!is_numeric($hostArray[0])) {
return new RedirectResponse($host);
}

$user = $this->userManager->findUserBy(['id' => $subdomain]);
if (null === $user) {
return new RedirectResponse($host);
}
}

即使id不存在,url也不会改变。当我逐步调试代码时,我可以看到他到达了 RedirectResponse。但是没有任何反应。

有什么想法吗?

最佳答案

听众不应该返回任何东西。如果要触发重定向,请设置事件响应:

public function onKernelRequest(GetResponseEvent $event)
{
if (!$event->isMasterRequest()) {
return;
}

$hostArray = explode('.', $event->getRequest()->getHost());
$subdomain = $hostArray[0];

array_shift($hostArray);
$host = implode('.', $hostArray);

if (is_numeric($subdomain) && $user = $this->userManager->findUserBy(['id' => $subdomain])) {
// you can pass the user as an attribute if you need him later
$event->getRequest()->attributes->set('user', $user);

return;
}

$event->setResponse(new RedirectResponse($host));
}

关于php - 根据内核请求重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22479384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com