Ruby 向机架重写响应添加查询字符串
我有一个简单的301重定向来捕获我为我的站点注册的所有非.com域,如下所示:Ruby 向机架重写响应添加查询字符串,ruby,url-rewriting,rack-rewrite,Ruby,Url Rewriting,Rack Rewrite,我有一个简单的301重定向来捕获我为我的站点注册的所有非.com域,如下所示: DOMAIN = 'www.mywebsite.com' use Rack::Rewrite do r301 %r{.*}, "http://#{DOMAIN}$&", :if => Proc.new {|rack_env| rack_env['SERVER_NAME'] != DOMAIN && ENV["RACK_ENV"] == 'production' } en
DOMAIN = 'www.mywebsite.com'
use Rack::Rewrite do
r301 %r{.*}, "http://#{DOMAIN}$&", :if => Proc.new {|rack_env|
rack_env['SERVER_NAME'] != DOMAIN && ENV["RACK_ENV"] == 'production'
}
end
我想在响应中添加一个querystring,以添加格式为的原始域
?utm_source=#{rack_env['SERVER_NAME']}
但无法完全解决如何不使服务器崩溃:)可以这样做并保留任何原始查询字符串吗
不太可能有人会点击主域下的任何子页面,但是当我从重写中删除$&并用我的字符串替换它时,它在日志中没有错误…我认为原始代码无法工作的原因是
rack_env
在第二个参数中不可用,因为它是第三个参数的块参数。这有意义吗
但是,您可以将Proc作为重定向的第二个参数传递,因此我认为类似的方法应该可以工作(部分测试:)
这简直是一针见血!非常感谢。我只需将第一个块中的REQUEST_URI更改为SERVER_NAME,它就可以完美地工作了!好极了:)你能赏金给我吗?谢谢;)希望它能正确地奖励给你-如果没有,请告诉我。它有,谢谢:)我不知道这个赏金的东西是如何工作的:)
DOMAIN = 'www.mywebsite.com'
ORIGINAL_REQUEST = Proc.new do |match, rack_env|
"#{DOMAIN}?utm_source=#{rack_env['REQUEST_URI']}"
end
use Rack::Rewrite do
r301 %r{.*}, ORIGINAL_REQUEST, :if => Proc.new {|rack_env|
rack_env['SERVER_NAME'] != DOMAIN && ENV["RACK_ENV"] == 'production'
}
end