3

我想创建一个用于部署 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

4 回答 4

3

我通过使用sinatrafinally 解决了这个问题。那是我的config.ru

require 'sinatra'

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

run Sinatra::Application
于 2012-05-23T11:59:06.013 回答
1

只是这样做,它非常简单:

宝石文件:

source 'https://rubygems.org'

ruby '2.0.0'

gem 'rack'
gem 'rack-rewrite'

配置.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!”。

于 2013-04-24T01:29:39.680 回答
0

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

于 2012-05-21T10:37:01.093 回答
0

我稍微调整了@rriemann 的答案。我发现我希望重定向完整路径,包括参数。另外,插入用户提供的字符串不是很危险吗?这对我有用:

require 'sinatra'

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

run Sinatra::Application

此外,如果有人需要,这里是我的实现的github 链接。

于 2015-12-22T15:24:47.193 回答