什么可以防止找不到“//”的路由

问题描述 投票:0回答:1

所以我很难找出问题所在。我在错误日志中注意到找不到“//”。

所以我试图理解为什么会这样,以及是否有办法在 symfony 尝试使用订阅者处理它之前捕获它并重定向。

问题:用户访问http://example.com//

我需要将其从 // 重定向到 http://example.com

我尝试创建一个订阅者以查看是否可以获得路径信息,但我没有得到该路线的输出。

class InvalidUrlRedirectSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents() : array
    {
        return [
            KernelEvents::CONTROLLER => ['onKernelController', 10],
        ];
    }

    // public function onKernelRequest(RequestEvent $event)
    public function onKernelController(ControllerEvent $event)
    {
        if (!$event->isMainRequest()) return;

        var_dump($event->getRequest()->getPathInfo());
        var_dump($event->getRequest()->getUri());
        var_dump($event->getRequest()->getRequestUri());
        var_dump($event->getRequest()->getBaseUrl());
        var_dump($event->getRequest()->getBasePath());
        echo 'hi';
    }
}

我也尝试过只有 RequestEvent 的版本,但仍然没有任何结果。

php symfony
1个回答
0
投票

问题:用户访问http://example.com//

我需要将其从 // 重定向到 http://example.com

是的,请允许我预先添加一些细节:您希望重定向到

http://example.com/
;这包括一个斜杠。这一点很重要,因为 URL 需要在
host[:port]
部分之后具有此路径分隔符。

我真诚地认为您已经是这个意思,但在回答问题时让每个人都达成共识可能会有所帮助。

让我们看看到目前为止你有什么:

    http://example.com//  -->  http://example.com/

根据我的理解,这个操作,我们可以称之为“重定向”或只是“URL路径规范化”,不应该是Symfony应用程序或其使用的任何PHP脚本的义务。

相反,每当请求到达应用程序时,路径就应该已经标准化。

现在哪个组件负责呢?虽然客户端可以使用带有两个斜杠的

http://example.com//
URL,但接下来接收它的是 Web 服务器。

这是我建议处理的地方,即网络服务器。请参阅您的 Web 服务器文档,查找用于规范化 HTTP 请求中的路径的配置设置。通常他们已经有了(以及标准化路径旁边 URL 的其他部分,如查询参数)。

如果您已经知道您正在使用哪个 Web 服务器,请通过编辑您的问题并在下面的评论中告诉我来分享它,以便可以在 Symfony 应用程序和其他 PHP 脚本的上下文中有目的地解决它。

© www.soinside.com 2019 - 2024. All rights reserved.