Symfony:如何在到达之前查明请求是否为404?

时间:2010-10-14 14:10:45

标签: symfony1 multilingual

我的网站是多语言的,如果用户在未指定双字母语言代码的情况下请求页面,他将被重定向到正确的语言(使用IP或以前的cookie设置)。例如,您可以尝试转到http://colnect.com并看到您将被重定向到colnect.com/en或colnect.com/es或其他(支持53种语言)。

问题是我收到虚假请求(主要来自机器人),例如colnect.com/fdlghsweru 我的重定向代码首先将它重定向(代码302)到colnect.com/en/fdlghsweru,然后返回404.这意味着: *有两个请求而不是一个 - >更多服务器负载 *有些机器人会在以后再次尝试使用colnect.com/fdlghsweru,或者甚至认为它存在

我所做的代码目前位于MyUser :: setCulture()

是否有一个好的地方,只有当我知道某个动作即将执行而不能获得404时,我才能找到代码?

更新:我目前所做的是检查我的代码是否$ sfRequest-> getParameter('module')是我的应用程序中的有效模块之一。这涵盖了大多数虚假请求,但不包括由现有URL附加伪造参数的故障机器人创建的请求。

由于

1 个答案:

答案 0 :(得分:0)

myUser代表一个会话。它不是处理重定向的最佳位置。

您可以收听* user.change_culture *事件并在操作中处理重定向但它仍然不是一种直接的方式。

另一种解决方案是实施过滤器。您可以在执行过程的早期识别错误的URL。

它有点取决于您想要重定向的路由数量。如果它只是一条路线而不是你可以直接检查目标页面是否存在,否则转发到404。

另一方面,如果你重定向所有没有文化的东西(为什么?老路线?),我想最好的方法是首先进行重定向,然后让目标页面处理,如果需要,可以转发到404。与当前相同,但没有使用myUser类。