2011-06-04 63 views
0

的routes.rb映射器错误:重定向传统路线呈现耙

Myapp::Application.routes.draw do 
    root :to => "posts#index" 
    match "posts/autocomplete_topic_name", :as => "autocomplete_topic_name" 
    match "/new" => "posts#new", :as => :new 
    # resources 
    resources :topics 
    resources :posts 
    resources :comments 
    # static 
    match "/about" => "pages#about", :as => :about 
    match "/help" => "pages#help", :as => :help 
    match "/home" => "home#index", :as => :home 
    # redirects 
    match "/tags" => redirect("/topics") 
    match "/entries" => redirect("/posts") 
    match "/comments" => redirect("/") 
end 

截至rake routes末的错误写着:

   tags  /tags(.:format)       {:to=>#<Proc:[email protected]/home/basicobject/.rvm/gems/ruby-1.9.2-p180/gems/actionpack-3.0.6/lib/action_dispatch/routing/mapper.rb:366 (lambda)>} 
      entries  /entries(.:format)      {:to=>#<Proc:[email protected]/home/basicobject/.rvm/gems/ruby-1.9.2-p180/gems/actionpack-3.0.6/lib/action_dispatch/routing/mapper.rb:366 (lambda)>} 
          /comments(.:format)      {:to=>#<Proc:[email protected]/home/basicobject/.rvm/gems/ruby-1.9.2-p180/gems/actionpack-3.0.6/lib/action_dispatch/routing/mapper.rb:366 (lambda)>} 

我想一些旧的路径重定向到新更好的SEO路线。路线如:

/entries/8需要重定向到/posts/8等等。

回答

1

棒这在application_controller.rb

rescue_from ActionController::RoutingError do |exception| 
    flash[:error] = "Sorry, we were not quite sure where you were trying to go" 
    redirect_to root_url 
end 
+0

显示404而不是重定向到根会更好吗? PS:谢谢你的回应。我的下一步是为所有其他路由错误创建一个捕获所有路由。 – BasicObject 2011-06-04 18:15:22

+0

此问题的作者希望保留旧版网址。投掷404的将少到SEO,将重定向到根。你需要做的是用新的URL返回301。当谷歌遇到301的时候,它会更新它的索引。任何其他可以降低您的搜索引擎优化排名给定的内容。 – Stewart 2013-02-05 04:32:56

0

您需要保留完整的URL,并通过它与任何参数一起。在这种情况下,即使通配符不匹配,您也无法将其传递到新路线。

试试这个

match "/entries/:post_id" => redirect("/posts/%{post_id}") 

这将通过您的PARAM以及投掷正确的HTTP错误代码,以便谷歌将更新它的索引。