我有一个简单的 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'
}
end
我想向响应添加一个查询字符串,以按格式添加原始域
?utm_source=#{rack_env['SERVER_NAME']}
但无法完全弄清楚如何不使服务器崩溃:)可以完成并保留任何原始查询字符串吗?
不太可能有人会访问主域下的任何子页面,但是当我从重写中删除 $& 并将其替换为我的字符串时,它会爆炸,并且日志中没有错误......
最佳答案
我认为您的原始代码无法工作的原因是因为 rack_env
在您的第二个参数中不可用,因为它是第三个参数的 block 参数。这有道理吗?
但是,您可以传递一个Proc作为重定向的第二个参数,所以我认为这样的东西应该可以工作(部分测试:)
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
关于ruby - 将查询字符串添加到机架重写响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14360477/