我想禁用将用户从/foo/
重定向到/foo
的{{3}}。禁用此行为的最佳方法是什么?我正在开发API,因此不需要这些重定向。
答案 0 :(得分:1)
如果您知道以单斜杠结尾的每条路线都应生成404,则只需定义一条路线即可:
/**
* @Route("{anything}/")
*/
public function routeWithTrailingSlashAction()
{
throw new ResourceNotFoundException();
}
我认为可能会有更合适的方法来做到这一点,但我认为它至少应该作为一种临时解决方案。
答案 1 :(得分:0)
要改善NicolasB的答案,我想在单个EventSubscriber中检查每个请求的斜杠就可以解决问题。尽管仍然有些偷偷摸摸,但这种解决方案对我来说似乎更易于维护。
答案 2 :(得分:0)
@NicolasB的解决方案太过hacky,所以我创建了自定义事件监听器,该事件监听器检查所有带有重定向的响应并将其转换为404错误:
<?php
namespace App\EventListener;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class RedirectionListener
{
public function onKernelResponse(FilterResponseEvent $event): void
{
$response = $event->getResponse();
if ($response->isRedirection()) {
throw new NotFoundHttpException();
}
}
}
别忘了注册:
App\EventListener\RedirectionListener:
tags:
- { name: kernel.event_listener, event: kernel.response }
注意:所有重定向都将转换为404,而不仅仅是尾部斜杠重定向。您应该牢记这一点。但是我正在开发API,因此根本不需要任何重定向,因此该解决方案可以解决我的问题。
如果您知道更好的解决方案,欢迎再次发表答复!