如何实现仅重定向的基于机架的heroku应用程序?

时间:2012-05-21 10:27:47

标签: redirect heroku rack http-status-code-301

我想创建一个机架应用程序来部署heroku,以创建301重定向到其他子域。

如果路径会结转,那就太好了。

我从以下代码开始,但它无效:

require 'rack-force_domain'

use Rack::ForceDomain, ENV["DOMAIN"]

run lambda { |env| [200, {'Content-Type'=>'text/plain'}, StringIO.new("Hello World!\n")] }

4 个答案:

答案 0 :(得分:3)

我最后使用sinatra解决了这个问题。那是我的config.ru

require 'sinatra'

get %r{(.*)} do
  redirect to("http://custom.domain#{params[:captures].first}"), 301
end

run Sinatra::Application

答案 1 :(得分:1)

刚刚这样做,这简直太简单了:

的Gemfile:

source 'https://rubygems.org'

ruby '2.0.0'

gem 'rack'
gem 'rack-rewrite'

config.ru:

require 'rack/rewrite'

use Rack::Rewrite do
  ...
end

run lambda { |env| [200, {'Content-Type'=>'text/plain'}, StringIO.new("Nothing Here!\n")] }

任何与您的重定向规则不符的内容都会返回200,文字“Nothing Here!”

答案 2 :(得分:0)

看看机架重写 - https://github.com/jtrupiano/rack-rewrite,它有一个你想要实现的例子。

答案 3 :(得分:0)

我调整了@rriemann的答案。我发现我希望重定向完整路径,包括params。此外,是否不插入用户提供的字符串,如此危险?这对我有用:

require 'sinatra'

get "*" do
  redirect to("http://custom.domain" + request.fullpath), 301
end

run Sinatra::Application

另外,如果有人想要,我的实现是github link