2010-11-09 34 views
34

Bất cứ khi nào người dùng truy cập vào trang sai, đường ray hiển thị 404.html từ thư mục công khai. Tuy nhiên, tôi chỉ muốn chuyển hướng trình duyệt đến trang gốc mà không hiển thị bất kỳ thứ gì. Vì vậy, tôi đã cố gắng phát triển, nhưng không có kết quả, nó vẫn hiển thị trang 404. Dưới đây là trích xuất từ ​​tệp tuyến đường của tôi:Đường ray: chuyển hướng tất cả các tuyến đường chưa biết đến root_url

# ... 
map.root :controller => 'home', :action => 'home' 
map.connect '*', :controller => 'home', :action => 'home' 

Mọi đề xuất? Cảm ơn các bạn!

+0

Tôi giả sử bạn có 'home_controller' chứa hành động 'home' có nội dung như render: nothing => true? – jenjenut233

+0

Không. Có một hành động gia đình trong bộ điều khiển nhà và cũng có chế độ xem tại nhà (home.html.erb). –

Trả lời

69

Nếu dự án của bạn được cung cấp bởi đường ray 3, thêm chỉ đơn giản là dòng này để routes.rb của bạn

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

Chỉnh sửa: Hỗ trợ Rails 4

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

Cảm ơn! Vâng, đó là Rails 2.3.10 –

+0

Cảm ơn * rất nhiều *, người đàn ông! Nó đã làm nó. Đó là cách tôi đã làm nó trong đường ray 2: 'map.connect '* path',: controller => 'home',: action => 'home'' Vì vậy, đó là'' * path'' đó là chìa khóa để tất cả mọi thứ. Cảm ơn một lần nữa :-) –

+0

Bạn cũng có thể sử dụng 'get' thay vì' match', mà chỉ là viết tắt để thêm 'qua:: get'. – Peeja

1

Bạn cần tạo một bộ điều khiển để làm điều đó

class RedirectsController 

    def index 
    redirect_to root_url 
    end 
end 

Và trong tuyến đường của bạn

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

Câu trả lời này cũng cho Rails 3? –

+0

Làm việc với đường ray 3 quá. Bạn chỉ cần thay đổi các ligne với trận đấu. Xem globing trong hướng dẫn định tuyến – shingara

19

Giống như câu trả lời của Arkan. Một điểm, nếu không muốn hành vi này trong môi trường phát triển, sau đó có thể làm -

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

Rails 4-

(routes.rb)

Bạn vẫn có thể sử dụng một cách đơn giản để get chuyển hướng tất cả các tuyến đường không xác định.

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

Nếu bạn muốn cung cấp định tuyến cho cả POST và GET yêu cầu bạn vẫn có thể sử dụng kết hợp, nhưng Rails muốn bạn để xác định phương thức yêu cầu qua via.

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

Hãy nhớ rằng routes.rb được thực hiện tuần tự (phù hợp với lộ trình đầu tiên mà phù hợp với cấu trúc đường dẫn được cung cấp), do đó, đặt wildcard bắt ở dưới cùng của matchings của bạn.

+1

Cảm ơn bạn đã thông báo ở phía dưới. – ahnbizcad

+0

Điều này vẫn hoạt động? Dường như không hoạt động trong ứng dụng Rails 4 của tôi. –

Các vấn đề liên quan