2010-11-09 9 views
34

Wenn ein Benutzer die falsche Seite aufruft, zeigt rails 404.html aus dem öffentlichen Ordner an. Ich möchte jedoch nur den Browser auf die Root-Seite umleiten, ohne etwas anzuzeigen. Also habe ich versucht, globbing, aber ohne Erfolg, es zeigt immer noch die 404-Seite. Hier ist ein Auszug aus meiner Routes-Datei:Rails: Umleiten aller unbekannten Routen zu root_url

Irgendwelche Vorschläge? Danke Leute!

+0

Ich nehme an, Sie haben eine 'home_controller', die die 'home' Aktion enthält, die etwas wie Render sagt: nichts => wahr? – jenjenut233

+0

Nein. Es gibt eine Home-Aktion im Home-Controller und es gibt auch eine Home-Ansicht (home.html.erb). –

Antwort

69

Wenn Ihr Projekt von Schienen 3, fügen Sie einfach folgende Zeile zu routes.rb angetrieben wird

match '*path' => redirect('/') 

Bearbeiten: Schienen 4 Unterstützung

match '*path' => redirect('/'), via: :get 
or 
get '*path' => redirect('/') 
+0

Danke! Nun, es ist Schienen 2.3.10 –

+0

Vielen Dank * viel *, Mann! Es hat es getan. So habe ich es in Rails 2 gemacht: 'map.connect '* path',: controller => 'home',: action => 'home'' Also ist es der' '* Pfad' ', der der Schlüssel zum. War das ganze Ding. Danke nochmal :-) –

+0

Sie können auch 'get' anstelle von' match' verwenden, was nur eine Kurzschrift für das Hinzufügen von 'via:: get' ist. – Peeja

1

Sie benötigen einen Controller erstellen zu tun, dass

class RedirectsController 

    def index 
    redirect_to root_url 
    end 
end 

Und in Ihre Routen

map.connect '*', :controller => 'redirects', :action => 'index' 
+0

Ist diese Antwort auch für Rails 3? –

+0

Funktioniert auch mit Schienen 3. Sie müssen nur die Ligne mit Übereinstimmung ändern. Siehe Globing in den Routenführern – shingara

19

Wie die Antwort von Arkan. Ein Punkt, wenn dieses Verhalten nicht in Entwicklungsumgebung wollen, könnten dann tun -

match '*path' => redirect('/') unless Rails.env.development? 
10

Rails 4-

(routes.rb)

Sie können immer noch eine einfache get verwenden, um Leite alle unbekannten Routen um.

get '*path', to: 'home#index' 

Wenn Sie möchten beide POST Routing zur Verfügung zu stellen und GET-Anfragen Sie noch Spiel verwenden können, aber Rails will, dass Sie die Request-Methode über via angeben.

match "*path" => "home#index", via: [:get, :post] 

Denken Sie daran, dass routes.rb sequentiell ausgeführt wird (die erste Route passend, dass die gelieferten Pfadstruktur paßt), so an der Unterseite der passenden setzt Wildcard kontrollieren.

+1

10 Vielen Dank für die Ankündigung des Putting it unten. – ahnbizcad

+0

Funktioniert das noch? Scheint nicht in meiner Rails 4 App zu funktionieren. –