2

我有一个简单的 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']}

但不能完全弄清楚如何不使服务器崩溃:) 可以完成并保留任何原始查询字符串吗?

不太可能有人会点击主域下的任何子页面,但是当我从重写中删除 $& 并用我的字符串替换它时,它会在日志中没有错误的情况下爆炸......

4

1 回答 1

2

我认为您的原始代码不起作用的原因是因为rack_env它在您的第二个参数中不可用,因为它是第三个的块参数。那有意义吗?

但是,您可以将 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
于 2013-01-28T16:35:07.990 回答