ruby - 将查询字符串添加到机架重写响应

标签 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'
  }
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/

相关文章:

ruby-on-rails - 如何在 ruby​​ 上的哈希中创建 deep_slice

ruby-on-rails - 带有自定义处理器和裁剪的 Rails 3.1 回形针错误

url-rewriting - ASP.CORE 2.0 中的 SEO url 重写

python - Django urls.py 在尝试访问 URL 时出现 404 错误

apache - Laravel 5.1 应用程序可以在没有 .htaccess 重写的情况下运行吗?

ruby-on-rails - 使用 ransack 过滤器中的多个变量重写动态 URL

ruby-on-rails - Carrierwave - 将图像调整为固定宽度

ruby - 如何修改 Ruby 类?

ruby - 如何使用 rack-rewrite 重写到不同的域?

ruby-on-rails - rack-rewrite -rails3.2 -heroku - 重定向硬编码图像 url