【问题标题】:Rails routing - redirection with block AND status codeRails 路由 - 使用块 AND 状态码进行重定向
【发布时间】:2012-08-09 09:23:19
【问题描述】:

好吧,我一直用这个撞到一堵砖墙上 - 非常感谢任何帮助!

我正在重定向旧网址,并且大部分情况下这很容易且运行良好,例如:

match '/pages/holiday-specials/', :to => redirect( "/accommodation", :status => 301 )

但是,我需要一个特殊的包罗万象的规则来进行一些正则表达式检查。这很好用,除非我不能让它通过状态。这会重定向并执行我需要的操作,但不会发送 301 状态:

match '/*:path', :to => redirect( lambda { |params| "/operator/#{/[^\d](\d+)([^\d]|$)/.match(params[:path])[1]}" }, :status => 301)

有什么想法吗?

【问题讨论】:

  • 附带说明,我相信301 是重定向路由时的默认状态码,因此您不需要手动设置它。我们的目标是302,但遇到了同样的问题。

标签: ruby-on-rails ruby routing


【解决方案1】:

将块移到方法括号外,如下:

match '/*:path', :to => redirect(:status => 301) { |params| "/operator/#{/[^\d](\d+)([^\d]|$)/.match(params[:path])[1]}" }

或将其拆分为多行:

match '/*:path', :to => redirect(:status => 301) do |params|
  "/operator/#{/[^\d](\d+)([^\d]|$)/.match(params[:path])[1]}"
end

【讨论】:

    猜你喜欢
    • 2011-02-18
    • 2021-05-27
    • 1970-01-01
    • 2017-06-09
    • 2016-02-14
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 2013-09-19
    相关资源
    最近更新 更多