rails 3将丢失的URL重定向到root

时间:2012-01-20 19:02:56

标签: ruby-on-rails-3 routes

我正在尝试在rails 3 app中设置一些semistatic页面, 我创建了一个带有一些非静止动作的页面控制器

class PagesController < ApplicationController

  def home
  end
  def about
  end
  def contact
  end
  def monday
  end
  def saturday
  end
  def sunday
  end

end

它在页面/星期一等显示页面......或/星期一等...如果我按照rails 3 removing controller name form url设置路线

但我只是想知道是否可以将丢失的网址重定向到/。根据exampel我有/星期一设置,但如果一个玩网址和输入/周二它不会打页。我可以重定向这种行为吗?

== EDIT ==

我已将代码更改为:

  resources :pages, :path => '/' do
    collection do
      # # match 'tuesday' => redirect('/')
      # # match 'wednesday' => redirect('/')
      # # match 'friday' => redirect('/')
      %w{home monday thursday saturday sunday about contact resources}.each do |url|
        get url
      end
    end
 end
 match 'pages/*page' => :root

url重写可以很好地循环遍历数组。 我尝试将wild cardline放在我的根文件的底部和resources:page块的底部。但是我得到了“无法找到控制器动作节目”的消息。

match 'pages/*page' => :root

是否正确的地方将其限制为/ tuesday之类的丢失网址以生成错误页面? 是否也可以将此重定向仅限制为几个操作而不是所有丢失的页面?从星期二,星期三,星期五开始...

2 个答案:

答案 0 :(得分:2)

您可以使用通配符路由来执行此操作。在您的routes.rb结尾处添加以下行:

match '*page' => :root

并且缺少的页面将重定向到root,并将params [:page]设置为所请求的URL。

如果您只想重定向Pages控制器中缺少的页面,请改为执行此操作

match 'pages/*page' => :root

您可以阅读有关路由here的更多信息。在文章末尾附近解释了通配符路由。

希望这有帮助!

答案 1 :(得分:2)

让它运作

我将通配符行更改为

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

而不是=&gt; :root,并将其留在资源:pages block。