ruby sinatra 如何使用正则表达式重定向

ruby sinatra how to redirect with regex

我正在尝试将根目录下的内容移动到 /en/ 目录,以使我的小服务支持多种语言。

所以,我想重定向这个 url

mysite.com/?年=2018

我的网站.com/en/?year=2018

我的代码是这样的

get %r{^/(\?year\=\d{4})$} do |c| redirect "/en/#{c}" end

但似乎我从来没有从 url.

中得到 #{c} 部分

这是为什么?还是有更好的方法来做到这一点?

谢谢!

您可以使用 request.path 变量来获取您要查找的信息。

例如,

get "/something" do
  puts request.path # => "/something"
  redirect "/en#{request.path}"
end

但是,如果您使用查询参数(即 ?yeah=2000),则必须手动将这些参数传递给重定向路由。

有点不直观,在 ActiveRecord 中有一个辅助方法。

require 'active_record'
get "/something" do
  puts params.to_param
  # if params[:year] is 2000, you'll get "year=2000"

  redirect "/en#{request.path}?#{params.to_param}"
end

您也可以很容易地编写自己的辅助方法:

def hash_to_param_string(hash)
  hash.reduce("") do |string, (key, val)|
    string << "#{key}=#{val}&"
  end
end

puts hash_to_param_string({key1: "val1", key2: "val2"})
# => "key1=val1&key2=val2"