2010-11-17 13 views
2

Je veux rediriger tous les utilisateurs d'IE vers une page spécifique qui leur indique que nous ne prenons pas en charge IE et qu'ils devraient essayer un autre navigateur. Comment est-ce que je peux faire ceci en utilisant des voies de rails 3 et permettez toujours aux utilisateurs publics de regarder la zone publique du site?Y a-t-il un moyen dans les rails 3 de rediriger un utilisateur Internet Explorer vers une page spécifique?

Mes itinéraires sont quelque chose comme ça ...

MyApp::Application.routes.draw do 
    constraints(NoSubdomain) do 
    root :to => 'public#index' 
    end 

    constraints(Subdomain) do 
    root :to => 'internal#index' 
    end 
end 

Je sais qu'il ya la possibilité de faire correspondre user_agent mais je ne suis pas en mesure d'obtenir à rediriger tous les utilisateurs qui tentent de dire aller à l'interne une partie du site (account.myapp.com) à '/ie' page. Des idées?

MyApp::Application.routes.draw do 
    constraints(NoSubdomain) do 
    root :to => 'public#index' 
    end 

    constraints :user_agent => /MSIE/ do 
    match "*" => redirect('/ie') 
    end 

    constraints(Subdomain) do 
    root :to => 'internal#index' 
    end 
end 
+1

Que diriez-vous de réellement faire fonctionner les choses dans IE? Je peux comprendre ne pas soutenir IE6 et ci-dessous, mais allez ... Quoi qu'il en soit, la détection du navigateur est faite avec l'agent utilisateur, qui dans le cas de IE est identifiable par la sous-chaîne MSIE. –

+1

+1 pour rejeter les utilisateurs d'IE !! Pendez les!! Mettez-les en feu !! –

Répondre

0

Il semble y avoir deux problèmes ici. D'abord, vous appelez la redirection lorsque vous faites correspondre tous les éléments. Ainsi, l'utilisateur demande account.myapp.com/ et cela correspond à n'importe quoi pour qu'ils soient redirigés vers account.myapp.com/ie, mais cela correspond également à n'importe quoi et donc ils sont redirigés vers account.myapp.com/ie et ils sont redirigés encore. Cela devient une boucle infinie, mais vous ne l'avez probablement pas vu parce que Rails ne le ferait même pas en raison de la deuxième chose. Deuxièmement, Rails vous oblige à mettre un nom là-dedans. Vous pouvez utiliser "url" ou ce que vous voulez (chemin, page, peu importe). C'est ainsi que Rails peut assigner le chemin demandé à ce nom dans params - de sorte que vous obteniez des paramètres [: url] avec n'importe quel chemin. J'étais un peu surpris que cela ne vous permette pas d'utiliser "", mais ce n'est pas le cas.

Cela fonctionne pour moi:

constraints :user_agent => /Firefox/ do 
    match "*url", :to => "ie#index" 
end 

Je suis sur un Mac et ne pas IE pour tester avec, mais vous pouvez facilement sous IE en là.