Symfony: как узнать, будет ли запрос 404 до его поступления? - PullRequest
0 голосов
/ 14 октября 2010

Мой сайт многоязычен, и если пользователь запрашивает страницу без указания двухбуквенного языкового кода, он будет перенаправлен на нужный язык (с использованием 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 голосов
/ 14 октября 2010

myUser представляет сеанс.Это не лучшее место для обработки перенаправлений.

Вы можете прослушать событие * user.change_culture * и обработать перенаправление в действии, но это все еще не прямой путь.

Другим решением будет внедрение фильтра.Вы сможете распознать неправильные URL-адреса довольно рано в процессе выполнения.

Это немного зависит от того, сколько маршрутов вы хотите перенаправить.Если это только один маршрут, вы можете напрямую проверить, существует ли целевая страница, и перейти на 404 в противном случае.

С другой стороны, если вы перенаправляете все без культуры (почему? Старые маршруты?), То, я думаю, лучшим способом было бы сначала сделать перенаправление, а затем позволить целевой странице обрабатывать до 404, еслинеобходимо.Почти так же, как в настоящее время, но не в классе myUser.

...