Les itinéraires dans Ruby On Rails sont sensibles à la casse. Il semble que quelqu'un ait apporté cela auparavant, et il a été étiqueté ne corrigera pas.
http://rails.lighthouseApp.com/projects/8994/tickets/393-Routes-Are-Case-sensible P>
qui me frappe comme malheureux, comme Je ne vois pas vraiment de hausse sur ma propre application pour que des itinéraires soient sensibles à la casse, tandis que sur la baisse, cela crée un potentiel de confusion et une apparition générale du manque de polonais à mon avis. P>
Quel est le Meilleur moyen de faire mes itinéraires insensibles insensibles? p>
J'ai trouvé ce conseil sur une recherche Google: p> C'est intelligent, mais cela laisse toujours la web_feeds partie de l'URL sensible à la casse. Cependant, je ne vois aucune manière similaire à cela, sans entrer dans chaque combinaison possible de web_feeds manuellement, mais c'est évidemment une solution horrible pour n'importe quel nombre de raisons. P> P>
6 Réponses :
Les itinéraires dans les rails sont sensibles à la casse car les URL sont sensibles à la casse. De W3C : P>
Les URL en général sont sensibles à la casse (à l'exception des noms de la machine). Il peut y avoir des URL ou des parties d'URL, En cas d'importance, mais L'identification de ceux-ci peut ne pas être facile. Les utilisateurs doivent toujours considérer que les URL sont sensibles à la casse. p> blockQuote>
Intéressant, ne le savait pas.
Je pense que si le Web avait commencé sous Windows, il se serait peut-être pas avéré de cette façon!
J'apprécie le fait qu'il y ait des moments où il est important de pouvoir différencier des cas (bien que franchement les seules instances que je puisse penser sont des cas d'angle), mais pour l'utilisation ordinaire, cela s'oppose aux attentes de l'utilisateur. Les utilisateurs s'attendent à ce que Stackoverflow.com/Questtions soit identique à Stackoverflow.com/Questtions, et en effet, c'est le cas. Et je ne suis pas sûr que les utilisateurs ordinaires ne prennent pas l'avis du W3C qu'ils «devraient toujours considérer que les URL sont sensibles à la casse».
Je pense que l'on devrait être indulgent vers ce que les humains entrent mais 301 redirigent vers la version canonique de l'URL.
@Llele avec le gemme de route_downcaseur, vous avez la possibilité de faire une redirection si vous le souhaitez.
Eh bien, vous pourriez essayer une autre approche. Faites de l'affaire Transformer Serverside et envoyez tout sur Rails Downcase. P>
Je pense que vous pouvez y parvenir avec mod_rewrite ou mod_spelling. P>
Bien que les URL soient sensibles à la casse, si vous voulez faire vos itinéraires insensibles, vous pouvez le faire.
dans application_controller.rb Mettez: P>
rescue_from ActionController::RoutingError do |exception| redirect_to request.url.downcase end
Vous devriez vérifier s'il est déjà descendu, quelque chose comme si request.url! = Demande.url.downeCase redirect_to request.url.downeCe
J'ai juste le même problème et j'ai résolu le middleware - jetez un coup d'œil ici: p>
http://gehling.dk/ 2010/02 / How-To-make-Rails-Routing-Case-insensible / P>
Remarque: cela ne s'applique que pour les rails 2.3 + P>
La solution ci-dessus n'a pas fonctionné pour les rails 3, mais j'ai réparé cela maintenant.
J'ai finalement fait cela dans un joyau, il est donc beaucoup plus facile d'utiliser: rubygems.org/gems/route_downcaseur
Cette solution est problmatique si vous avez un nom d'actifs / images dans un cas mixte. Par exemple, si vous utilisez déjà une image d'actifs / images / abc_xyzz.png (cas mixte), ensuite après avoir utilisé cette solution, il tentera de localiser une image à des actifs / images / abc_xyzz.png (minuscule) et serveur va répondre avec 404 non trouvé.
@Nadeemyasin ceci est résolu en utilisant l'initialisateur d'exclusion. # config / initializers / route_downcaser.rb routedowncaser.configuration do | config | config.redirect = true config.exclude_patterns = [/ actifs \ // i, / polices \ // i, / Quelques \ / IMPORT \ / chemin / i = i] fin
Just Monkey-Pattez-le à Downcase par défaut. Exemple simple:
Comme les États du W3C, les URL sont sensibles à la casse
Une solution simple est, n'est peut-être pas une solution élégante, mais pourtant de travail est: Utilisez un fichier avant_filter dans votre contrôleur d'application comme celui-ci.
before_filter :validate_case def validate_case if request.url != request.url.downcase redirect_301_permanent_to request.url.downcase end end def redirect_301_permanent_to(url) redirect_to url, :status=>:moved_permanently end
Il vaut mieux le faire dans le rack. Dans le contrôleur d'application, vous avez déjà passé le répartiteur de route des rails.