2010-10-14 10 views
0

Mon site est multilingue et si un utilisateur demande une page sans spécifier le code de langue à deux lettres, il sera redirigé vers la langue appropriée (en utilisant IP ou les paramètres de cookies précédents). Par exemple, vous pouvez essayer d'aller au http://colnect.com et vous verrez que vous serez redirigé vers colnect.com/en ou colnect.com/es ou autre (53 langues sont supportées).Symfony: comment savoir si une requête va être 404 avant qu'elle n'arrive?

Le problème est quand je reçois des demandes fausses (la plupart du temps contre les robots collecteurs) tels que colnect.com/fdlghsweru mon code de redirection premier redirige (code 302) à colnect.com/en/fdlghsweru qui renverra 404. Ce signifie: * il y a deux demandes au lieu d'un -> plus la charge du serveur * Certains bots soit essayer colnect.com/fdlghsweru plus tard ou même croire qu'il existe

Le code que je l'ai fait actuellement situé dans MyUser :: setCulture()

Y a-t-il un bon endroit où je peux trouver le code seulement quand je sais qu'une action est sur le point d'être exécutée et de ne pas avoir 4 04? MISE À JOUR: ce que je fais actuellement est de vérifier mon code si $ sfRequest-> getParameter ('module') est l'un des modules valides dans mon application. Cela couvre la plupart des requêtes fausses mais pas celles créées par des bots défaillants qui ajoutent des paramètres bidon aux URL existantes.

Merci

Répondre

0

myUser représente une session. Ce n'est pas le meilleur endroit pour gérer les redirections.

Vous pouvez écouter l'événement * user.change_culture * et gérer votre redirection dans une action, mais ce n'est toujours pas simple.

Une autre solution consisterait à implémenter un filtre. Vous seriez en mesure de reconnaître les mauvaises URL au tout début du processus d'exécution.

Cela dépend un peu du nombre de routes que vous souhaitez rediriger. Si c'est seulement une route que vous pourriez directement vérifier si la page cible existe et renvoyer à 404 sinon. D'autre part, si vous redirigez tout sans culture (pourquoi? Anciennes routes?) Que je suppose que le meilleur moyen serait de faire une redirection en premier et laisser la page cible gérer vers l'avant à 404 si nécessaire. Assez la même chose que actuellement mais pas avec la classe myUser.

+0

Merci de votre réponse, mais je crains que cela ne m'aide pas. J'essaie de savoir qu'une action sera effectuée et non 404. La raison pour laquelle j'utilise myUser est parce que j'ai besoin de vérifier si la langue de l'utilisateur est définie. Dans un tel cas, si vous visualisez le site en espagnol et obtenez un lien d'un autre membre qui le voit en allemand, le site redirigera son lien/de/vers un lien/es/afin que vous puissiez toujours voir le site dans Espanol. Il est important pour moi de garder le/es/en tant que partie de l'URL, donc si vous envoyez le lien à un ami, la valeur par défaut (puisqu'il n'est pas un utilisateur) serait l'espagnol et pas une autre langue. – Collector