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"
我正在尝试将根目录下的内容移动到 /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"