在 Rails 上解码重定向 url - Ruby

Decoding a redirect url - Ruby on Rails

我想使用 URI 或 CGI 库从这个 url 的查询部分获取路径。换句话说,就是:'/scouting/amateur'。这可能还是我需要使用正则表达式?

http://10.241.180.63:3149/login?redirect_path=http%3A%2F%2F10.241.180.63%3A3149%2Fscouting%2Famateur

试试这个 -

url = URI.parse('http:://10.241.180.63:3149/login?redirect_path=http%3A%2F%2F10.241.180.63%3A3149%2Fscouting%2Famateur')

redirect_path = u.opaque.split("redirect_path=").last
# redirect_path is now {"redirect_path"=>["http://10.241.180.63:3149/scouting/amateur"]}

result = redirect_path.split("/").last(2).join("/")
# result = 'scouting/amateur'

关于 Ruby 内置的建议(如果设计一个方法,您可能想要实现一些错误处理)。

require 'uri'

query = URI("http://10.241.180.63:3149/login?redirect_path=http%3A%2F%2F10.241.180.63%3A3149%2Fscouting%2Famateur").query

path = URI(URI.decode(query).split('=')[1]).path

您可能会发现 gem uri-query_params 有帮助/更优雅(它将自动解码查询参数)。例如

require 'uri/query_params'

uri = URI("http://10.241.180.63:3149/login?redirect_path=http%3A%2F%2F10.241.180.63%3A3149%2Fscouting%2Famateur")

URI(uri.query_params["redirect_path"]).path