如何在Symfony 4.1中禁用尾部斜杠重定向?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Symfony 4.1中禁用尾部斜杠重定向?相关的知识,希望对你有一定的参考价值。

我想禁用将用户从default Symfony 4.1 behavior重定向到/foo//foo。禁用此行为的最佳方法是什么?我正在开发API,所以我不需要这些重定向。

答案

如果您知道以尾部斜杠结尾的每条路由都应该生成404,那么您可以简单地定义一条路线:

/**
 * @Route("{anything}/")
 */
public function routeWithTrailingSlashAction()
{
    throw new ResourceNotFoundException();
}

我假设可能有更合适的方法来做到这一点,但我认为它应该至少可以作为临时修复。

另一答案

为了改进NicolasB的答案,我想在单个EventSubscriber中检查每个请求的斜杠就可以了。虽然仍然有点偷偷摸摸,但这个解决方案对我来说似乎更容易维护。

另一答案

@NicolasB的解决方案实在太糟糕了,所以我创建了自定义事件监听器,它使用重定向检查所有响应并将它们转换为404错误:

<?php

namespace AppEventListener;

use SymfonyComponentHttpKernelEventFilterResponseEvent;
use SymfonyComponentHttpKernelExceptionNotFoundHttpException;

class RedirectionListener
{
    public function onKernelResponse(FilterResponseEvent $event): void
    {
        $response = $event->getResponse();

        if ($response->isRedirection()) {
            throw new NotFoundHttpException();
        }
    }
}

别忘了注册:

AppEventListenerRedirectionListener:
  tags:
  - { name: kernel.event_listener, event: kernel.response }

注意:所有重定向都将转换为404,而不仅仅是尾部斜线重定向。你应该牢记这一点。但是我正在开发API,所以我根本不需要任何重定向,所以这个解决方案解决了我的问题。

如果您知道更好的解决方案,欢迎您发布另一个回复!

以上是关于如何在Symfony 4.1中禁用尾部斜杠重定向?的主要内容,如果未能解决你的问题,请参考以下文章

使用 .htaccess 重定向 404 而不重定向尾部斜杠

为啥在 URL 中缺少尾部斜杠 (/) 时会发生重定向?

删除尾部斜杠重定向循环

如何在 Symfony 2 中 login_check 后禁用重定向

Web.config:使用尾部斜杠将URL输入重定向到URL而不使用尾部斜杠

laravel 尾部斜杠重定向到本地主机