我想创建一个机架应用程序来部署heroku,以创建301重定向到其他子域。
如果路径会结转,那就太好了。
我从以下代码开始,但它无效:
require 'rack-force_domain'
use Rack::ForceDomain, ENV["DOMAIN"]
run lambda { |env| [200, {'Content-Type'=>'text/plain'}, StringIO.new("Hello World!\n")] }
答案 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。